使用Java

时间:2017-10-12 09:02:42

标签: java swing jlabel

我知道很多人之前已经问过这个问题,但我找不到任何解决我问题的答案。我的代码是这样的:

public void mouseClicked(MouseEvent arg0) {
    TEXT.setText("ON");
    myfunction(); //runs for a very long time
}

JLabel的原始文字是"OFF"。现在,我想在单击鼠标时将文本更改为"ON",但在myfunction()完成之前文本不会设置(可能需要几分钟)。

我已尝试使用invalidate函数,创建一个单独的函数来设置文本,但没有任何工作。

请帮我解决这个问题!

1 个答案:

答案 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}}继续做它的事情。考虑停用刚刚点击的按钮,这样用户就无法在正在进行时开始执行(这通常就是你想要的......)