Диалог сообщений в теме в Java - PullRequest
0 голосов
/ 05 марта 2012

Как показать диалоговое окно из цепочки? У меня есть приложение Swing, которое выполняет набор действий в фоновом режиме. После завершения обработки мне нужно показать диалоговое окно сообщения. Основное приложение Swing - «Всегда сверху».

JOptionPane.showMessageDialog(null, "Hello");

не показывает окно сообщения выше. Ну, мне нужно написать вышеуказанную строку в методе выполнения потока.

Дополнительные данные:

Поток создается путем расширения класса потока. Метод запуска вызывается из EDT нажатия кнопки.

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Передайте ссылку на основное приложение вместо null в вызове showMessageDialog().

Также убедитесь, что он вызывается в EDT. Используйте, например, SwingUtilities.invokeLater

1 голос
/ 05 марта 2012

Вы можете вызвать JOptionPane.showMessageDialog () или JOptionPane.showInternalMessageDialog () из Thread, но у вас есть тест для isEventDispatchThread или путем включения в invokeLater или invokeAndWait (зависит от возвращаемого значения обратно до Thread),

Swing si однопоточный и весь вывод в графический интерфейс Swing должен выполняться по EDT (больше в Concurency в Swing ), в противном случае вы можете видеть только thin toolbar с close button и без некоторого содержимого ни JComponents

1 голос
/ 05 марта 2012

Попробуйте вызвать его с помощью SwingUtilities.invokeLater, чтобы он был перенаправлен для выполнения в поток пользовательского интерфейса:

// thread run method
public void run() {

    ...

    SwingUtilities.invokeLater(new Runnable() {
           public void run() {
               JOptionPane.showMessageDialog(null, "Hello");
           }
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...