我有一个GUI,它有一个按钮,需要定期按下,在某种意义上,它应该暂停之间。但我无法做到这一点。我尝试过使用Thread.sleep()。下面是代码。
protected Object doInBackground() throws Exception {
while(true){
btnSend.doClick();
try {
Thread.sleep(2000);
continue;
} catch (InterruptedException e1) {
}
}
return null;
}有没有人能告诉我我哪里出了问题,怎么解决?
发布于 2014-07-10 09:42:58
您不应该为此使用SwingWorker,因为您不应该在事件线程之外调用doClick()。如果您只想间歇性地进行此调用,则只需对需要间歇性地在事件线程上执行的调用使用Swing计时器即可。
int timerDelay = 2000;
new Timer(timerDelay, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnSend.doClick();
}
}).start();编辑
你在评论中问:
,但我需要在该按钮单击事件上更新另一个UI。如果我不使用swingworker,另一个用户界面将会冻结。我必须使用swingworker。这样做是可能的吗?
恐怕你弄错了。按钮点击和GUI代码都应该在EDT上。任何由按钮单击的ActionListener生成的后台非图形用户界面代码都应该在SwingWorker中完成,而不是单击本身。
例如,
其他地方
btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
new SwingWorker<Void, Void>() {
public Void doInBackground() throws Exception {
//.....
return null;
}
}
}
});如果您需要关于您的情况的更具体的建议,那么您将需要考虑创建并发布一个Minimal, Complete, and Verifiable Example Program,在该‘ll中,您可以将代码压缩到仍然可以编译和运行的最小部分,没有外部依赖项(例如,需要链接到数据库或图像),没有与您的问题无关的额外代码,但仍然可以演示您的问题。
https://stackoverflow.com/questions/24666177
复制相似问题