对于我当前的应用程序,我正在努力识别我的应用程序中的Swing线程。使用Swing线程我的意思是:
我的申请:
到目前为止,我已阅读过Swing教程,所以这是我的猜测和问题:
后台任务是服务器套接字,后台任务分别是应用程序接收数据的已打开连接数。
这些任务没有最终结果,所以我想SwingWorker<T,S>
应该只定义中间结果的通用类型?对于每个解析的XML,我都会调用publish
。但是,我如何区分我收到的数据?也许XML数据只包含足够的信息来构建class A
,或者数据包含足够的信息来构建class A
和class B
,但是如何将两者都包含在一个中间结果中呢?包装类?
process()
方法调用更改以使其对用户界面可见,不是吗?我不知道这是如何工作的。我在哪里开始我的任务?是为了调用SwingWorker.execute()
构造函数中的JFrame
吗?
XML Reader应该是Task还是应该处理传入连接的每个Thread都是任务?
答案 0 :(得分:2)
在您描述的上下文中,我不确定是否会使用SwingWorker
。
我的基本想法是:
main()
的Thread
API)final
变量中声明此对象,并调用SwingUtilities.invokeLater()
进行显示这个结果在你的UI中我过去成功使用的另一种替代方法是使用 EventBus 来处理在EDT中调用UI更新方法,您的套接字线程会将“结果对象”发送到那个EventBus。
关于SwingWorker
使用,我想说主要用途是当最终用户开始动作时(例如通过点击按钮或菜单项)并且此动作很长并且应该在后台处理,背景然后,处理方法必须将信息反馈给用户界面。