3

我有一个 Java 系统托盘 UI,需要计划数据库轮询。生成新线程并通知 UI 的最佳方法是什么?

我是 Swing 的新手,它是线程模型。

4

3 回答 3

6

SwingWorker正是为此而设计的。

它允许您运行不会阻塞 GUI 的任务,然后返回一个值并在完成后更新 GUI。

Java 有一个关于如何使用的很棒的教程SwingWorker

基本上做数据库拉入的doInBackground()方法。并且,在该done()方法中,更新您的 GUI。

于 2009-07-28T18:52:25.227 回答
5

正如 jinguy 提到的 SwingWorker 应该是你首先看的地方。 在所有地方,维基百科都有一些有趣的例子,在你处理 JavaDocs 之前可能会很好看。

于 2009-07-28T18:56:18.947 回答
2

正如 jjnguy 提到的,SwingWorker 帮助抽象了这里的复杂性,但基本上你在一个新线程中完成工作,当方法返回时,你需要在 swing 线程中更新 GUI。如果您不使用 SwingWorker,则底层方法是 SwingUtilities(或 EventQueue).invokeLater(Runnable)。

不要在摇摆队列之外更新任何与摇摆相关的东西(包括模型),会发生不可预知的事情。并且不要尝试持有对队列的引用并使用它,因为队列被挂起和替换(例如,如果您打开模型对话框)。

于 2009-07-28T19:03:31.087 回答