我试图弄清楚如何将变量从JOptionPane
设置为正在运行的主线程。根据{{1}}对话框的结果,这会影响该主线程中的某些逻辑。这是一个粗略的例子:
JOptionPane
我可能会以错误的方式解决这个问题。也许我应该使用public class MainThread {
public static void main(String[] args) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 0, 1000);
}
}
public class MyTask extends TimerTask {
int x = 0;
AsyncPopUp popUp = new AsyncPopUp();
public void run() {
// code to detect reset here
// x = 0;
x++;
System.out.println(x);
if (x==10){
new AsyncPopUp().showMessage();
}
}
}
public class AsyncPopUp {
void showMessage() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int response = JOptionPane.showConfirmDialog(null, "Reset Counter?",
"Question", JOptionPane.YES_NO_OPTION);
if (response == 0){
System.out.println("Send Message to task to reset");
}
}
});
t.start();
}
}
JPanel
?或ActionListener
?
感谢。
我认为这可能会奏效 - 如果这是不好的做法,请告诉我:
SwingWorker
答案 0 :(得分:0)
你的第一个“粗略的例子”离工作解决方案不远(如果我正确理解了这个问题):
reset()
课程添加MyTask
方法,该方法会执行用户决定重置时应执行的任何操作。AsyncPopUp
类中添加一个构造函数,该类需要MyTask
个对象作为参数,并将其保存到字段task
。new AsyncPopUp
课程中执行MyTask
时,将this
作为构造函数参数传递System.out.println("Send Message to task to reset")
致电task.reset()
。顺便说一句:请注意if (response == JOptionPane.YES_OPTION)
看起来比if (response == 0)
更好......; - )