在下一个JOptionPane出现之前,JOptionPane不会消失

时间:2016-02-03 16:29:09

标签: java swing joptionpane invokelater

我有一个显示来自JOptionPane的确认消息的进程。此过程从SwingUtilities.invokeLater(runnable)调用,该过程位于JMenuItem的Actionlistener中。 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方法有关吗?

1 个答案:

答案 0 :(得分:-1)

我找到了解决这个问题的方法。我不得不在SwingUrtilities.invokeLater方法中创建一个新的Thread。这是新代码:

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();      
                }
            });