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

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

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 ?


person Vegeta    schedule 03.02.2016    source источник
comment
попробуйте выполнить reavlidate(); перекрасить()   -  person CMPS    schedule 03.02.2016
comment
Без вашего SSCCE / MCVE без понятия, коротко запускаемый, компилируемый, это не какая-то особая задача,   -  person mKorbel    schedule 03.02.2016
comment
Опубликуйте MCVE. Обязательно скопируйте и вставьте свой код в новый проект и убедитесь, что он компилируется и запускается, прежде чем публиковать его здесь.   -  person user1803551    schedule 03.02.2016
comment
Все еще ждете MCVE, и почему вы звоните start и finalize внутри Runnable?   -  person user1803551    schedule 04.02.2016


Ответы (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();      
                }
            });
person Vegeta    schedule 04.02.2016