为什么在线程中不能调用函数?

时间:2018-08-30 22:34:51

标签: java multithreading swing methods jlabel

我正在JFrame窗口上对后台进程进行多线程处理,并且我想更新函数中全局JLabel变量的文本。

因此,当线程运行时,我的while和for循环会运行,但是在它们运行期间,它将调用另一个函数来更改文本。

但是,它直到线程完成执行(即循环结束时)才更新。发生这种情况的任何原因以及我该如何解决?

如果我尝试仅更改线程内JLabel的文本,则结果相同。

1 个答案:

答案 0 :(得分:2)

可能发生的事情是您的线程做了更改,但是直到Swing事件分派线程到来并更新了显示之后,屏幕显示才会更新。建议和更安全地使用Swing事件分配线程调用用户界面更新方法。您可以通过将gui更新代码放入此方法中来做到这一点:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        // call gui update here
    }
});

这仍然不能解决您的问题(线程完成执行后会进行更新)。这只是为了明确表明您在此处处理两个线程。您的单独线程上的for循环可能首先完成,因为绘图线程通常较慢。但是,知道这一点将帮助您计划将哪些代码传递给Swing事件分配线程。如果您确实希望在该时间点更新for循环,则可以将整个for循环放入invokeLater()中。

相关问题