我需要编写一个应用程序,每隔X次检查一次,并将其更新为GUI comtols。 我之前在java中有一点知识并且之前编写过一些应用程序,但我从未处理过多线程和更新GUI之类的东西。
我虽然这将是一件容易的事,所以我开始编写我的软件。其他一切都非常有用。我不能让应用程序每X次执行一次检查,然后更新GUI。
有人可以就此给出一些指导吗?我看到了什么?常见的做法是什么? 是线程吗?递归?其他什么?
如果可能的话,我会提供一些代码示例,我可以更好地理解。
感谢您的努力!
答案 0 :(得分:6)
我假设你正在使用Swing。如果是,请使用Swing Timer。
或者,如果检查本身是一个长时间运行的任务,不能在GUI线程中完成(因为它会冻结它),那么使用SwingWorker并将其提交给ScheduledExecutorService由Executors类创建。
答案 1 :(得分:2)
尝试类似:
private volatile boolean killCheck;
public void startChecking() {
killCheck = false;
Thread checker = new Thread() {
public void run() {
for (;;) {
try { Thread.sleep( 500 ); }
catch (InterruptedException ie) { break; }
if (killCheck) break;
EventQueue.invokeLater( new Runnable() {
public void run() {
// Update GUI here on EventQueue.
}
} );
}
}
};
checker.start();
}
public void stopChecking() { killCheck = true; }
定时器(并且至少有两个,在swing和util中)有很多有趣和优雅,但有时你只需要完成工作。用“X时间”替换我的500。确保在EventQueue上进行Swing调用!如果抛出InterruptedException,可能会添加一条消息。
查看SwingWorker;它会以更安全的方式做同样的事情,但如果你要做很多这样的事情,你可能会发现你自己做的更有力量。