我正在开发一个从客户端套接字接收数据的项目。用户界面包含用于显示接收数据的文本区域。
将接收到的数据从服务器线程传递回文本区域的最佳方法是什么?
目前我所做的是以下内容。
jtextarea.setText(newMessage);
我的方法是否正确?
答案 0 :(得分:2)
不,数字4是错误的,因为您正在改变EDT(Swing事件线程)的Swing组件关闭的状态。将jtextarea.setText(newMessage);
包装在Runnable中,并通过:SwingUtilities.invokeLater(Runnable r)
将其排在Swing事件线程上,或者使用SwingWorker作为后台线程,并使用发布/进程方法对从中更新Swing GUI背景线程。
请查看:
答案 1 :(得分:0)
有关更专用的动作处理示例,请查看https://github.com/greggwon/Ham,尤其是https://github.com/greggwon/Ham/blob/master/SwingUtil/src/org/wonderly/swing/ComponentUpdateThread.java中的代码,以获取有关如何处理摆动组件更新的具体示例。此类提供了“在执行之前”,“在执行中”和“在执行之后”的功能行为,它们均在适当的线程中运行,以便您可以进行组件更新,而不必担心需要哪个线程,而不必自己创建所有线程和可运行对象。 / p>