识别用于在Java中显示频繁数据输入的Swing线程
对于我当前的应用程序,我正在努力识别应用程序中的Swing线程。对于Swing线程,我的意思是:识别用于在Java中显示频繁数据输入的Swing线程,java,multithreading,swing,Java,Multithreading,Swing,对于我当前的应用程序,我正在努力识别应用程序中的Swing线程。对于Swing线程,我的意思是: 初始线程 事件调度线程 工作线程 我的申请: 简单的用户界面,用于显示在套接字上接收到的数据 数据由许多模型类描述 接收到的数据是XML,XML被解析,模型对象被实例化 用户界面应该显示接收到的数据 这些数据更新得非常频繁,这意味着XML消息很短,但其中有很多 把它放到上下文中:我正在编写一个Java分析器 到目前为止,我已经阅读了Swing教程,以下是我的猜测和问题: 后台任务是服务器套接
- 初始线程
- 事件调度线程
- 工作线程
- 简单的用户界面,用于显示在套接字上接收到的数据
- 数据由许多模型类描述
- 接收到的数据是XML,XML被解析,模型对象被实例化
- 用户界面应该显示接收到的数据
- 这些数据更新得非常频繁,这意味着XML消息很短,但其中有很多
- 把它放到上下文中:我正在编写一个Java分析器
SwingWorker
应该只为中间结果定义泛型类型?对于每个解析的XML,我都会调用publish
。但我如何区分我收到的数据呢?可能XML数据只包含足够的信息来构建a类
,或者可能数据包含足够的信息来构建a类
和B类
,但是如何将这两种信息包装成一个临时结果?包装类process()
方法调用更改以使其对用户界面可见,不是吗?我不明白这是怎么回事。我在哪里启动任务?调用JFrame
构造函数中的SwingWorker.execute()
是为了实现这一点吗在您描述的上下文中,我不确定是否会使用
SwingWorker
我的基本想法是:
- 从您的
中,启动几个用于服务套接字的线程(标准main()
API)Thread
- 当一个这样的套接字线程获得一些输入时,它会立即解析XML(正如您所描述的,解析应该非常快,因此我认为您不需要为此启动一个新线程)
- 解析XML后,套接字线程创建一些要显示的“结果对象”,在
变量中声明此对象,并调用final
在UI中显示此结果SwingUtilities.invokeLater()
关于
SwingWorker
use,我想说的是,主要用途是当最终用户启动一个动作(例如,单击按钮或菜单项)时,这个动作很长,应该在后台处理,后台处理方法必须将信息反馈给UI。非常好,这看起来像是我一直在寻找的解决方案。然而,我看不出invokeLater和使用EventBus之间有什么区别。使用EventBus可以避免声明和传递内联Runnable,因为只有内联Runnable函数才能调用UI上的更新方法。在我看来,这个设计有点简洁。JavaSwing是否提供了EventBus接口?我找不到任何文档,或者它是一个可以用于我的事业的架构吗?不,你必须使用第三方库。Swing应用程序中最常用的是。还有guts event(),我自己的项目,但它要求您在应用程序中使用Guice依赖项注入库,这对于您正在开发的应用程序来说可能有点过火(或者没有)。两者都是开源的。