Java GUI和线程

时间:2010-07-27 11:46:47

标签: java multithreading thread-safety

我有一个带有textarea和按钮等的GUI .........

我有一个不同的类,它是一个不断运行的线程。我想在线程类中满足某些条件时将文本附加到textarea。

在包含textarea的类中,我有textarea的getter方法。我还将类(包含textarea)声明为线程类中的变量。

我尝试在变量上调用textarea的get方法,然后调用append()方法,但textarea不会自行更新。

我做错了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

重点是你必须关注Sun根据Swing的线程管理给出的指导,你可以看看here

您将理解的是,您必须根据具体情况使用SwingUtilities.invokeLater(..)SwingUtilities.invokeAndWait(..)发送与GUI相关的事件。这是因为GUI事件由事件调度线程管理,您不应该在自己的线程中管理它们。

答案 1 :(得分:1)

您不得从非UI线程调用UI方法。要从非UI线程调用方法,您必须使用特定于UI的方法,该方法将“将一段代码发送到UI线程以供执行”。在SWT中,这是Display.getDefault().asyncExec(Runnable)。对于Swing,请使用SwingUtilities.invokeLater()

有关详细信息,请参阅this article