我在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信息。我将使用它并上传我所做的任何有用的进展。
答案 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条件可能适用于整个计时器