我知道很多人之前已经问过这个问题,但我找不到任何解决我问题的答案。我的代码是这样的:
public void mouseClicked(MouseEvent arg0) {
TEXT.setText("ON");
myfunction(); //runs for a very long time
}
JLabel
的原始文字是"OFF"
。现在,我想在单击鼠标时将文本更改为"ON"
,但在myfunction()
完成之前文本不会设置(可能需要几分钟)。
我已尝试使用invalidate函数,创建一个单独的函数来设置文本,但没有任何工作。
请帮我解决这个问题!
答案 0 :(得分:2)
问题是mouseClicked(...)
上执行了public void mouseClicked(MouseEvent arg0) {
TEXT.setText("ON");
(new Thread() {
public void run() {
myfunction();
}
}).start();
}
。这是负责处理各种用户操作(如鼠标单击)以及组件绘制(如更新屏幕上标签文本)的UI Thread。如果在UI线程上执行长时间运行的方法调用,它将被阻止,并且在执行完成之前无法绘制任何内容。您必须使用Thread
来解决此问题。
以下可能不是最优雅的解决方案,但如果您不熟悉多线程,则可以完成工作:
Thread
它会产生一个处理你方法的新Thread
,它会让UI {{1}}继续做它的事情。考虑停用刚刚点击的按钮,这样用户就无法在正在进行时开始执行(这通常就是你想要的......)