通过C ++(JNI)启动Jdialog焦点问题

时间:2016-07-01 06:37:21

标签: java c++ swing java-native-interface awt

我有一个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版本都可以重现此问题。我不知道那个特定的机器/装置有什么不同。

任何线索?

0 个答案:

没有答案