我遇到了我一直和Swing一直有过的问题。 Swing对程序员处理自己的异步操作并不好。
现在,在我面前,我有一个典型的问题,经常被这种类型的答案所抨击"让Swing的EDT处理异步任务"或"稍后使用调用"。
通常情况下,如果我从头开始构建整个应用程序,那将是一种方法。但是,我不是。我目前拥有的是一个程序(我不应该以任何方式修改)在自己的线程中运行并触发其自己设计的异步更新事件。我想使用Swing为它创建一个UI包装器,在面板中显示应用程序,同时提供与底层程序交互的按钮。
现在,我真的不想丢掉头发。我没有在没有进展的情况下正面解决这个问题几个小时。如果这个问题的可接受答案没有出现,我将简单地使用一个OpenGL包装器(这是正确的"简单地说#34;)。
是否有传统的方法在Java Swing中包装这种性质的多线程应用程序?
该方法是否允许被动查看不断变化的模型? (没有UI鼠标或键盘事件,但它仍然更新)
如果没有传统的方式,是否有黑客,躲避或其他胶带解决方案来解决我想要做的事情?
无法识别应用程序的异步部分在另一个程序中并建议修改该程序的答案将被视为非建设性的,并将被标记为偏离主题。
如果您需要其他信息,请发表评论,我会尽可能地披露。
答案 0 :(得分:3)
使用SwingWorker
。在doInBackground()
的实施中启动该流程。为worker提供对将从进程接收“异步更新事件”的侦听器的引用。在监听器中,根据保证允许“被动查看不断变化的模型”来调用publish()
。您process()
的实施将在美国东部时间sustainable rate调用。可以看到几个例子here。