JOptionPane не исчезает, пока не появится следующая JOptionPane

У меня есть процесс, который показывает подтверждающие сообщения от JOptionPane. Этот процесс вызывается из SwingUtilities.invokeLater(runnable), который находится внутри Actionlistener для JMenuItem. Код для запускается так:

SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        MyClass c=new MyClass(file)
                        try {
                            c.start();
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        try {
                            this.finalize();
                        } catch (Throwable e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                });

В MyClass есть этот метод:

private boolean userInput(){
    String message="yes or no?";
    JCheckBox checkbox = new JCheckBox("Do this for all.");
    Object[] params={message,checkbox};
    int n=JOptionPane.showConfirmDialog(null,params,"message",JOptionPane.YES_NO_OPTION);
    boolean answer=(n==JOptionPane.YES_OPTION)?true:false;
    if(checkbox.isSelected()){
        nextQ=false;
        nextA=answer;
    }
    return answer;
}

который вызывается много раз. Когда отображается сообщение JOptionPane, я нажимаю на его кнопку (да / нет), но сообщение не исчезнет, ​​пока не появится следующее сообщение. В чем может быть проблема? Связано ли это с методом invokeLater?

1 ответ

Решение

Я нашел способ решить это. Мне пришлось создать новый поток внутри метода SwingUrtilities.invokeLater. Это новый код:

SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    Thread t=new Thread(new Runnable(){
                        MyClass c=new MyClass(file)
                        public void run(){
                          c.start(); 
                        }
                     }); 
                     t.start();      
                }
            });
Другие вопросы по тегам