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