Отображение «JOptionPane.showMessageDialog» без остановки потока выполнения - PullRequest
7 голосов
/ 26 марта 2011

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

JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE);

Но это приостанавливает все остальное в главном потоке, чтобы не показывать несколько диалогов одновременно, только после другого. Может ли это быть так просто, как создание нового JFrame вместо использования JOptionPane?

Ответы [ 3 ]

11 голосов
/ 26 марта 2011

Согласно документам :

JOptionPane создает JDialogs, которые являются модальными.Чтобы создать немодальный диалог, вы должны напрямую использовать класс JDialog.

Ссылка выше показывает некоторые примеры создания диалоговых окон.


Еще один вариант - запустить JOptionPane в своем собственном потоке примерно так:

  Thread t = new Thread(new Runnable(){
        public void run(){
            JOptionPane.showMessageDialog(null, "Hello");
        }
    });
  t.start();

Таким образом, основной поток вашей программы продолжается, даже если модальное диалоговое окно открыто.

0 голосов
/ 27 февраля 2014

попробуйте это:

  EventQueue.invokeLater(new Runnable(){
                        @Override
                        public void run() {
                     JOptionPane op = new JOptionPane("Hi..",JOptionPane.INFORMATION_MESSAGE);
                     JDialog dialog = op.createDialog("Break");
                     dialog.setAlwaysOnTop(true);
                     dialog.setModal(true);
                     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);      
                     dialog.setVisible(true);
                        }
                    });
0 голосов
/ 26 марта 2011

Вы можете просто запустить отдельный Runnable, чтобы отобразить диалоговое окно и обработать ответ.

...