Мое приложение интегрировано с сторонним автономным приложением, которое откроет диалоговые окна JOptionPane в отдельном потоке, и я запускаю поток, чтобы закрыть все открытые диалоговые окна. Поэтому перед закрытием мне нужно получить сообщение, записанное в диалоговом окне.Как получить программный контент сообщения JOptionPane
Мой образец основной программы, с которой я пытаюсь достичь:
public static void main(String[] args)throws Exception{
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(() -> {
Window[] possibleWindow = Window.getWindows();
if (possibleWindow != null && possibleWindow.length > 0) {
System.out.println("Found " + possibleWindow.length + "Window(s) " + possibleWindow[0].getClass().getSuperclass());
for (int i = possibleWindow.length - 1; i >= 0; i--) {
try {
Window window = possibleWindow[i];
//here where I need to get the dialog box message before closing it.
window.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}, 1, 1, TimeUnit.SECONDS);
JOptionPane.showMessageDialog(null, "test !!!!");
}
вы уверены, что все ссылки в массиве possibleWindow будут экземплярами JOptionPane? Если да, то имеет ли смысл в вашем приложении использовать Extend (путем прямого расширения или инкапсуляции) JOptionPane для создания нового класса, который регистрировал бы содержимое панели при ее создании? Таким образом, вы не будете пытаться проиграть в конце. – Teto
Я только что проверил, JOptionPane не является подклассом Window. Поэтому я не вижу, как он может появиться в массиве возможного окна. Но если вы можете получить ссылку на существующий JOptionPane другим методом, вы можете просто вызвать JOptionPane.getMessage(), чтобы получить объект сообщения. – Teto
Мое приложение интегрировано с сторонним независимым приложением качания, и я не создавал объекты JOptionPane для отображения диалоговых окон сообщений. –