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