Java Swing多线程访问JTextArea

weixin_38058113 2019-09-12 03:22:45

我有一个多线程的Java Swing应用程序。 有几个线程会通过textArea.append("something")写入JTextArea来调用该方法。我应该这样包装它: SwingUtilities.invokeLater(new Runnable() { @Override public void run() { textArea.append("something"); } }); 或者它只是一个内容更新和Swing会做正确的线程本身?








...全文
119 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38067090 2019-09-12
  • 打赏
  • 举报
回复

通常,绝对任何对Swing所做的更新,特别是改变控件状态或布局的任何更新都应该从Swing线程完成。 在这种情况下,您是绝对正确的,将每个更新包装到invokeLater是正确的方法。你可以尝试更新你自己的队列或类似的东西,但是当Swing已经提供了你需要的功能时,那么使用它就很有意义。 见JTextArea文档: http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html 凡说 警告:Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略。 凡说: 一般Swing不是线程安全的。除非另有说明,否则必须在事件派发线程上访问所有Swing组件和相关类。 JTextArea#append方法没有任何记录,说它可以安全地从其他线程使用。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧