立即进行Swing操作

时间:2014-06-18 17:32:23

标签: java swing time-wait

我在Swing中有一个方法可以隐藏并显示一些名为setScreen(int stage)的按钮,这些按钮会根据stage参数隐藏或不隐藏某些按钮。我想调用该方法,然后等待几秒钟然后再次调用它,就像在这段代码中一样:

... //Here stage has been assigned to some value

setScreen(stage);

if (stage != STAGE_TWO) {
  sleep(WAIT_TIME * 1000);
  stage = WELCOME;
  setScreen(stage);
}

setScreen(int stage)的代码是这样的:

void setScreen(int stage) {
    switch (stage) {
        case WELCOME:
            screen.infoLabel.setText("Welcome!");
            screen.startButton.setVisible(true);
            break;

        case STAGE_TWO:
            screen.infoLabel.setText("We are in stage two!");
            screen.startButton.setVisible(false);
            break;
    }

    screen.validate();
}

其中screen是扩展JFrame的类的实例化。

这里的问题是永远不会显示第一个setScreen(stage),因为线程在提交更改之前进入休眠状态。我已经尝试用sleep替换while循环来检查系统的时间,但效果是一样的。

**编辑:**我在推荐的StackOverflow线程中找到了一些可能有用的Swing Timer信息。我将使用它并上传我所做的任何有用的进展。

1 个答案:

答案 0 :(得分:1)

你正在睡觉事件派遣线程。不要这样做并使用:

javax.swing.Timer timer = new javax.swing.Timer(WAIT_TIME * 1000, new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        if (stage != STAGE_TWO) {
            stage = WELCOME;
            setScreen(stage);
        }
    }
});
timer.start();

根据您的要求,if条件可能适用于整个计时器