У меня есть приложение 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);
....
}
Я попытался перехватить события окна, но это правильно показывает, что WindowActivation и WindowOpened были вызваны в обоих случаях (напрямую или через JNI). WindowDeactivation никогда не вызывали.
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);
}
});
Журнал показывает следующее:
30 июня 2016 г. 8:00:11
ИНФОРМАЦИЯ: Метод WindowListener вызвал: windowActivation.
30 июня 2016 г. 8:00:11
ИНФОРМАЦИЯ: Метод WindowListener вызвал: windowOpened.
Эта проблема воспроизводима во всех версиях Windows, кроме одной системы Windows 10. Я не знаю, что отличает эту конкретную машину / установку.
Есть какие-нибудь подсказки?
Задача ещё не решена.
Других решений пока нет …