Java Swing多线程访问JTextArea

我有一个多线程的Java Swing应用程序。Java Swing多线程访问JTextArea

有几个线程会通过textArea.append("something")写入JTextArea来调用该方法。我应该这样包装它:

SwingUtilities.invokeLater(new Runnable() { 

@Override

public void run() {

textArea.append("something");

}

});

或者它只是一个内容更新和Swing会做正确的线程本身?

回答:

通常,绝对任何对Swing所做的更新,特别是改变控件状态或布局的任何更新都应该从Swing线程完成。

在这种情况下,您是绝对正确的,将每个更新包装到invokeLater是正确的方法。你可以尝试更新你自己的队列或类似的东西,但是当Swing已经提供了你需要的功能时,那么使用它就很有意义。

JTextArea文档: http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html

凡说

警告:Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略。

凡说:

一般Swing不是线程安全的。除非另有说明,否则必须在事件派发线程上访问所有Swing组件和相关类。

JTextArea#append方法没有任何记录,说它可以安全地从其他线程使用。

以上是 Java Swing多线程访问JTextArea 的全部内容, 来源链接: utcz.com/qa/258740.html

回到顶部