public void aMethod(){
new Thread(new Runnable() {
public void run() {
int decide = JOptionPane.showConfirmDialog(null, confirmName?, JOptionPane.YES_NO_OPTION);
}
}).start();
System.out.println("Number of decison " + decide); //Can't find symbol "decide"
}
<小时/> JOptionPane无法在没有被放入线程的情况下运行(我不知道为什么)。然而,当把它放到一个线程时,我无法从中得到变量。 P / s:这是callbackImplement Java RMI中的一个方法。 谢谢。新年快乐:P
答案 0 :(得分:1)
您可以在Runnable
子类中定义自定义字段,并将它们传递给构造函数:
public class MyRunnable implements Runnable {
private int decide;
public MyRunnable(int decide) {
this.decide = decide;
}
public void run() {
...
}
}
至于为什么需要在自己的线程上调用Swing方法,你可以阅读这篇文章:Threads and Swing。实际上,您不应该创建自己的线程,而只是在Swing事件调度线程上安排它:
SwingUtilities.invokeLater(new MyRunnable(decide));
答案 1 :(得分:1)
我不认为使用匿名类作为runnable类可以做到这一点。您需要创建一个命名类,它具有“决定”变量值的getter。
问题当然是主线程必须等到创建的线程完成后再调用getter来获取'decision'变量的值。
鉴于此,看起来很可疑为什么你会首先使用一个单独的线程来显示对话框。
如果你仍然想这样做,主线程需要在创建的线程上调用Thread.join,然后再调用getter来获取'decision'的值。