【问题标题】:Wait a few seconds in Swing在 Swing 中等待几秒钟
【发布时间】:2014-06-21 15:19:43
【问题描述】:

我需要在一个带有 Swing 接口的程序中调用两个不同的方法之间等待几秒钟。这些方法与 GUI 无关。

firstMethod();
//The interface is changed by other methods
...
//I want to Wait five seconds
secondMethod();

我尝试过使用Swing Timer,但它不起作用。显然,Timer 启动了,但它是一个非阻塞操作,所以secondMethod() 会立即执行。我可以使用sleep(),但这会在这 5 秒内冻结 GUI,因此在此之后界面不会更新,我希望避免这种情况。

我在这里找到了一些使用Future<V> 的建议,并且我已经阅读了Javadoc,但我以前从未使用过ExecutorService,我担心我可能会为这么简单的事情编写一段过于复杂的代码。

你知道怎么做吗?

【问题讨论】:

  • “在 Swing 中等待几秒钟 [已解决]” 不要在问题中提出解决方案。要么写一个答案,要么删除它。
  • 不要在问题标题中添加“已解决”。相反,您应该“接受”有助于解决问题的答案。其他所有问题都一样:stackoverflow.com/q/24337311/131872

标签: java swing wait


【解决方案1】:

听起来你的代码是这样的:

firstMethod();

startTimer();

secondMethod();

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

你不能只是启动一个计时器而不做任何事情。当计时器触发时,您需要在 Timer 的 actionPerformed 中调用 secondMethod(...)

【讨论】:

    【解决方案2】:

    使用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()
    

    【讨论】:

    • 所以你刚刚编辑了它。很好。那么问题出在哪里?
    • @user2891462 请告诉我这种方法的问题在哪里。
    • 这种方法非常好,我以一种非常愚蠢的方式使用定时器。我刚刚编辑了原始帖子。谢谢。
    • 我不知道谁否决了该帖子而没有留下任何评论。
    • 不是我,我打算在 StackOverflow 允许时尽快选择它作为有效答案。
    【解决方案3】:

    计时器不会像睡眠那样停止代码执行。 您必须为其分配一个 ActionListener ,当时间到时会收到通知。

    它是这样的:

    firstMethod();
    Timer t = new Timer(5000);
    t.setRepeats(false);
    t.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                secondMethod();    
            }
        })
    t.start();
    

    【讨论】:

    • 如果 secondMethod() 是暂停之后的百万行代码怎么办?您不希望整个程序都在 actionPerformed() 中。
    猜你喜欢
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多