免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3395 | 回复: 3

求解:Java程序如何夺回输入焦点? [复制链接]

论坛徽章:
0
发表于 2007-09-06 13:58 |显示全部楼层
在双显示卡,双显示器情况下,现在要做一个Java程序在主显示器做数据录入,调用mplayerc在第二显示器播放广告。

String command = "\"C:\\mplayerc.exe\" \"C:\\IBM\\IBMRetail\\demo\\video\\box.wmv\" /fullscreen /monitor 2 /play";
Process player = Runtime.getRuntime().exec(command);

目前遇到的问题是, Java主程序执行上面程序后,mplayerc 确实可以正确的在第二显示器上全屏幕播放广告。
但是 Java主程序 失去了输入焦点。

问题在于,我们的环境中 没有标准键盘,鼠标,或者触摸屏幕,因此无法夺回输入焦点。
尝试在SWT中 使用

public void shellDeactivated(ShellEvent e) {

System.out.println("Shell is Deactivated.");
  shell.forceActive();
  shell.forceFocus();
  text1.setFocus();
  text1.forceFocus();
}

但是貌似主程序获得了输入焦点。而实际上经过测试 输入焦点 还在 mplayerc.exe上。

请问如何 让 Java程序 夺取Windows 系统层次上的 输入焦点?

论坛徽章:
0
发表于 2007-09-06 14:33 |显示全部楼层

回复 #1 realqsecofr 的帖子

或者 有没有办法 嵌入 mplayerc 到SWT Shell里面。

论坛徽章:
0
发表于 2007-09-18 07:59 |显示全部楼层
原帖由 realqsecofr 于 2007-9-6 14:33 发表
或者 有没有办法 嵌入 mplayerc 到SWT Shell里面。

这样不是不可以,我们曾经试过把OpenOffice嵌入到SWT里边。但是需要写JNI的代码。需要通过X11或者Gtk/Qt来通知C/C++的应用程序失去焦点或者得到焦点。同时在C/C++程序内部也要在得到或者失去焦点的时候通过JNI中的回调函数来通知SWT

论坛徽章:
0
发表于 2007-09-21 11:58 |显示全部楼层
原帖由 realqsecofr 于 2007-9-6 13:58 发表
在双显示卡,双显示器情况下,现在要做一个Java程序在主显示器做数据录入,调用mplayerc在第二显示器播放广告。

String command = "\"C:\\mplayerc.exe\" \"C:\\IBM\\IBMRetail\\demo\\video\\box.wmv\" /fu ...


there is a tricky, ineffiecient but definitly should nt b the best solution:
after u run the exec method try 2 sleep the thread 4 a while, like 3-5 secs, then call setVisible(true) (if ur app is based on SWT), the focus will be back 2 SWT
it works in single monitor env, i'v no idea what gonna happen in mutiple monitors env.... hope it helps~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP