Java 暂停Swingworker
我有一个GUI,它有一个按钮,需要周期性地按下,在这两个按钮之间应该暂停。但我无法做到这一点。我试过Thread.sleep()。下面是代码Java 暂停Swingworker,java,swing,swingworker,Java,Swing,Swingworker,我有一个GUI,它有一个按钮,需要周期性地按下,在这两个按钮之间应该暂停。但我无法做到这一点。我试过Thread.sleep()。下面是代码 protected Object doInBackground() throws Exception { while(true){ btnSend.doClick(); try { Thread.sleep(2000);
protected Object doInBackground() throws Exception {
while(true){
btnSend.doClick();
try {
Thread.sleep(2000);
continue;
} catch (InterruptedException e1) {
}
}
return null;
}
有人能告诉我哪里出了问题以及如何解决吗?您不应该为此使用SwingWorker,因为您不应该在事件线程下调用
doClick()
。如果您想要做的只是间歇性地进行此调用,那么只需在事件线程上为需要间歇性地进行的调用使用Swing计时器即可
编辑
你在评论中问:
但我需要在按钮点击事件上更新另一个UI。如果我不使用swingworker,其他UI将冻结。我必须使用swingworker。有可能吗 恐怕你弄错了。按钮点击和GUI代码都应该在EDT上。由按钮单击的ActionListener生成的任何后台非GUI代码都应该在SwingWorker中完成,而不是单击本身 e、 g 别处
btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
new SwingWorker<Void, Void>() {
public Void doInBackground() throws Exception {
//.....
return null;
}
}
}
});
btnSend.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
新SwingWorker(){
public Void doInBackground()引发异常{
//.....
返回null;
}
}
}
});
如果你需要对你的情况提出更具体的建议,那么你就要考虑创建和发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码。但是仍然显示了您的问题。
您不应该为此使用SwingWorker,因为您不应该在事件线程下调用doClick()
。如果您想要做的只是间歇性地进行此调用,那么只需在事件线程上为需要间歇性地进行的调用使用Swing计时器即可
编辑
你在评论中问:
但我需要在按钮点击事件上更新另一个UI。如果我不使用swingworker,其他UI将冻结。我必须使用swingworker。有可能吗 恐怕你弄错了。按钮点击和GUI代码都应该在EDT上。由按钮单击的ActionListener生成的任何后台非GUI代码都应该在SwingWorker中完成,而不是单击本身 e、 g 别处
btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
new SwingWorker<Void, Void>() {
public Void doInBackground() throws Exception {
//.....
return null;
}
}
}
});
btnSend.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
新SwingWorker(){
public Void doInBackground()引发异常{
//.....
返回null;
}
}
}
});
如果你需要对你的情况提出更具体的建议,那么你就要考虑创建和发布一个你把代码浓缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题不相关的代码。但仍然说明了你的问题。
“如何解决”什么?你写的东西怎么了?@drewmoore啊……很抱歉漏掉了……事实上,每两秒钟点击一次按钮都不会发生。它只在第一次发生时停止。是否引发中断异常
?你不知道,因为你有一个空的捕捉区。至少,在那里放一个println()
语句,让您知道发生了什么。在try
块内放置另一个,在while
块后放置另一个,您可以看到发生了什么。你就是这样想出来的。所有这些都是一般性的建议。在这个具体案例中,请参阅@Hovercraft的答案“如何解决”什么?你写的东西怎么了?@drewmoore啊……很抱歉漏掉了……事实上,每两秒钟点击一次按钮都不会发生。它只在第一次发生时停止。是否引发中断异常
?你不知道,因为你有一个空的捕捉区。至少,在那里放一个println()
语句,让您知道发生了什么。在try
块内放置另一个,在while
块后放置另一个,您可以看到发生了什么。你就是这样想出来的。所有这些都是一般性的建议。在这个特定的例子中,请参阅@Hovercraft的回答,但我需要更新该按钮单击事件的另一个UI。如果我不使用swingworker,其他UI将冻结。我必须使用swingworker。有可能吗?@Soujanya:请看编辑到编辑。另外,我看到您已经在对的评论中收到了建议。这是一个很好的推荐,一个强烈要求你仔细考虑一下。但是我需要在按钮点击事件上更新另一个UI。如果我不使用swingworker,其他UI将冻结。我必须使用swingworker。有可能吗?@Soujanya:请看编辑到编辑。另外,我看到您已经在对的评论中收到了建议。这是一个很好的建议,一个强烈要求你仔细考虑。