首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止/解决Java应用程序窃取Linux窗口管理器中的焦点

如何停止/解决Java应用程序窃取Linux窗口管理器中的焦点
EN

Stack Overflow用户
提问于 2010-05-12 22:58:44
回答 1查看 2.2K关注 0票数 10

我们希望在Java中快速构建小部件的原型。我们将它们覆盖在一个用专有的第三方图形包编写的显示器上。我们发现Java GUI偷走了窗口管理器上的键盘焦点。

窗口管理器是fvwm,我已经尝试过配置它,以便Java应用程序设置为不获得焦点,而且如果它确实获得了焦点,则将其移开并将其提供给其他GUI。

如果我在Java应用程序上运行它,它就不能工作(只要鼠标在Java GUI上,它就有键盘焦点)--如果我用一些标准的X GUI小部件(XEyes)来替换Java GUI,它就会工作得很棒。这为Java不尊重ICCCM的说法(由fvwm的人维护)提供了一些依据。

我想知道其他人是否已经解决了这个问题,如果是的话,是如何解决的。到目前为止,我有一些如何尝试和解决这个问题的选择:

1)旋转Java设置,希望如果我关闭了那里的焦点,也许它会将焦点控制权交还给窗口管理器(到目前为止,我已经在父JFrame上尝试了"setFocusable(false)“。这不管用。一个线程"http://java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaao“指出我应该做"Window.setFocusableWindowState(false)”这个有问题的图形用户界面还没有在窗口中重做,但我也不完全相信Java会重新获得焦点

2)使用JNI在Java程序中进行低级X调用。我认为这可能会起作用,但是,我从来没有玩过太多的低级X。我不确定我应该使用什么调用(XtSetKeyboardFocus()应该是危险的调用...)或者我如何识别我正在操作的GUI (在这方面,fvwm很好,因为他们有一个GUI,允许你点击另一个GUI并找到它的“名称”和“类”)

3)使用“更强大”的窗口管理器。一些不使用ICCCM的窗口管理器可能能够更好地处理Java。当然,管理人员太多了,我不知道该专注于什么。同样,许多人似乎缺乏通过应用程序指定重点(大多数人似乎只关心广泛的政策)。

EN

回答 1

Stack Overflow用户

发布于 2010-05-13 00:17:43

最后,原型在JWindow而不是JFrame中重新工作,当JWindow调用setFocusableWindowState(false)时,Java确实交还了焦点……问题解决了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2820014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档