我需要在使用Swing接口的程序中调用两个不同的方法之间等待几秒钟。这些方法与GUI无关。
firstMethod();
//The interface is changed by other methods
...
//I want to Wait five seconds
secondMethod();
我尝试使用Swing Timer
但它不起作用。显然,Timer
启动但是是非阻塞操作,因此secondMethod()
会立即执行。我可以使用sleep()
,但这会冻结这五秒钟的GUI,所以界面直到那之后才会更新,我宁愿避免。
我在这里找到了一些使用Future<V>
的建议,我已经阅读了Javadoc但我以前从未使用过ExecutorService
,我担心我可能会编写过于复杂的代码对于那些简单的事情。
关于如何做的任何想法?
答案 0 :(得分:4)
听起来你的代码就像:
firstMethod();
startTimer();
secondMethod();
我尝试使用定时器,但它不起作用
你不能只是启动一个Timer而什么都不做。当计时器触发时,你需要在定时器的actionPerformed中调用secondMethod(...)
。
答案 1 :(得分:3)
使用Swing Timer代替Java Timer和Thread.sleep。
Timer timer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
secondMethod();
}
});
timer.setRepeats(false);
timer.start()
答案 2 :(得分:3)
计时器不会像睡眠一样停止代码执行。 您必须为其分配一个ActionListener,它将在时间结束时得到通知。
它是这样的:
firstMethod();
Timer t = new Timer(5000);
t.setRepeats(false);
t.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
secondMethod();
}
})
t.start();