Luo*_*Luo 7 java swing multithreading jtextarea
我有一个多线程Java Swing应用程序.
几个线程将JTextArea
通过写入via 来调用该方法textArea.append("something")
.我应该像这样包装它:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
textArea.append("something");
}
});
Run Code Online (Sandbox Code Playgroud)
或者它只是一个内容更新,Swing会自己做正确的线程吗?
一般来说,您对 Swing 所做的任何更新,特别是任何更改控件状态或布局的操作,都应该从 Swing 线程完成。
在这种情况下,您是绝对正确的,将每个更新包装到一个中invokeLater
是执行此操作的正确方法。您可以尝试更新自己的队列或类似的队列,但是当 Swing 已经提供了您需要的功能时,那么使用它就有意义了。
请参阅JTextArea
文档:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html
哪里说的
警告:Swing 不是线程安全的。有关详细信息,请参阅 Swing 的线程策略。
其中说:
一般来说,Swing 不是线程安全的。除非另有说明,所有 Swing 组件和相关类都必须在事件分派线程上访问。
该JTextArea#append
方法中没有任何记录表明可以安全地从其他线程使用该方法。
归档时间: |
|
查看次数: |
488 次 |
最近记录: |