我正试图使此按钮禁用其他两个按钮并同时执行图形化操作。这是我尝试的第一件事:
public void actionPerformed(ActionEvent arg0) {
reset.setEnabled(false);
switcher.setEnabled(false);
for (int i = 0; i < 10; i++){
a.change();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
}
所以这是按钮上的actionperformed方法我试图编码和switcher和reset是我禁用的按钮,和a.c change()应该引起视觉效果。当我尝试这个时,整个程序停止了十秒钟,然后按钮被禁用,在这十秒钟内没有任何视觉效果。然后我试了:
public void actionPerformed(ActionEvent arg0) {
reset.setEnabled(false);
switcher.setEnabled(false);
if (!s.isAlive()){
s = new Thread(new Changer());
s.start();
}
else{
s.interrupt();
}
}
Where Changer is:
private static class Changer implements Runnable {
public void run() {
for (int i = 0; i < 10; i++){
a.change();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
}
}
这正是我想要的,按钮立即被禁用,然后是视觉效果。这样做的原因是actionperformed的所有效果在退出函数时激活,所以第一种方式,它将十秒钟为actionperformed结束,并且它将在结束时禁用和十个a.c echange ()s ?第二种方法是在开始s后解决,所以按钮禁用,然后s继续,它的效果在actionperformed结束后?
可以。
有一个单一的UI线程管理事件和重画(更新屏幕)。在你的第一次尝试中,你让它睡着了。这样做意味着在它唤醒之前不会发生任何其他事情(关于UI)。是。你是对的。