我有一个Java应用程序,它显示了一个模态无父JDialog。这个JDialog有几个文本字段。当我在win64上独立启动它时,焦点正确地出现在JDialog上。 但是当我通过我的C ++应用程序(JNI)调用启动函数时,它在技术上得到了关注,但实际上并没有。我必须单击对话框才能输入文本字段。 C ++代码正在调用Java函数:
public static bool launchApp(someVars){
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
MyJDialog dialog = new MyJDialog();
dialog.setVisible(true);
....
}
我尝试捕获窗口事件,但它正确地显示WindowActivated和WindowOpened在两种情况下都被调用(直接或通过JNI)。 WindowDeactivated永远不会被调用。
dialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
LOGGER.info("WindowListener method called: windowClosed.");
}
public void windowOpened(WindowEvent e) {
LOGGER.info("WindowListener method called: windowOpened.");
}
public void windowActivated(WindowEvent e) {
LOGGER.info("WindowListener method called: windowActivated.");
}
public void windowDeactivated(WindowEvent e) {
LOGGER.info("WindowListener method called: windowDeactivated.");
}
public void windowGainedFocus(WindowEvent e) {
LOGGER.info("WindowFocusListener method called: windowGainedFocus.");
}
public void windowLostFocus(WindowEvent e) {
LOGGER.info("WindowFocusListener method called: windowLostFocus.");
}
public void windowStateChanged(WindowEvent e) {
LOGGER.info(
"WindowStateListener method called: windowStateChanged."+ e);
}
});
日志显示如下:
2016年6月30日晚上8:00:11 INFO:WindowListener方法,名为:windowActivated。
2016年6月30日晚上8:00:11 INFO:WindowListener方法调用:windowOpened。
除一个Windows 10系统外,所有Windows版本都可以重现此问题。我不知道那个特定的机器/装置有什么不同。
任何线索?