我正在尝试使此按钮禁用其他两个按钮并同时执行图形化操作。这是我尝试的第一件事:
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方法我正在尝试编码,切换器和重置是我禁用的按钮,a.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();
}
}
Changer是:
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;
}
}
}
}
这正是我想要的,按钮立即被禁用,然后是视觉效果。这样做的原因是actionper的所有效果都会在退出函数时激活,所以第一种方式,actionperformed结束将持续10秒,并且它会同时执行两次禁用和十次a.change()s ?第二种方式是在启动s之后解析,所以按钮禁用,然后s继续并在actionperformed结束后发挥作用?
答案 0 :(得分:6)
是
有一个UI线程管理事件和重新绘制(更新屏幕)。在你的第一次尝试中,你让它入睡。这样做意味着在它醒来之前不会发生任何其他事情(关于UI)。
答案 1 :(得分:1)
是。你是对的。这就是原因。