我有一个 Java 系统托盘 UI,需要计划数据库轮询。生成新线程并通知 UI 的最佳方法是什么?
我是 Swing 的新手,它是线程模型。
我有一个 Java 系统托盘 UI,需要计划数据库轮询。生成新线程并通知 UI 的最佳方法是什么?
我是 Swing 的新手,它是线程模型。
SwingWorker
正是为此而设计的。
它允许您运行不会阻塞 GUI 的任务,然后返回一个值并在完成后更新 GUI。
Java 有一个关于如何使用的很棒的教程SwingWorker
。
基本上做数据库拉入的doInBackground()
方法。并且,在该done()
方法中,更新您的 GUI。
正如 jinguy 提到的 SwingWorker 应该是你首先看的地方。 在所有地方,维基百科都有一些有趣的例子,在你处理 JavaDocs 之前可能会很好看。
正如 jjnguy 提到的,SwingWorker 帮助抽象了这里的复杂性,但基本上你在一个新线程中完成工作,当方法返回时,你需要在 swing 线程中更新 GUI。如果您不使用 SwingWorker,则底层方法是 SwingUtilities(或 EventQueue).invokeLater(Runnable)。
不要在摇摆队列之外更新任何与摇摆相关的东西(包括模型),会发生不可预知的事情。并且不要尝试持有对队列的引用并使用它,因为队列被挂起和替换(例如,如果您打开模型对话框)。