在Swing中等待几秒钟

时间:2014-06-21 15:19:43

标签: java swing wait

我需要在使用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,我担心我可能会编写过于复杂的代码对于那些简单的事情。

关于如何做的任何想法?

3 个答案:

答案 0 :(得分:4)

  

听起来你的代码就像:

firstMethod();

startTimer();

secondMethod();
  

我尝试使用定时器,但它不起作用

你不能只是启动一个Timer而什么都不做。当计时器触发时,你需要在定时器的actionPerformed中调用secondMethod(...)

答案 1 :(得分:3)

使用Swing Timer代替Java Timer和Thread.sleep。

请查看How to Use Swing Timers

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();