我有一个显示来自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方法有关吗?
答案 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();
}
});