我目前在java swing中编写迷你游戏。我已经设置了GUI,游戏涉及一系列数字在屏幕上闪烁然后消失 - 用户必须按照它们出现的顺序再次输入数字。
当数字最初显示时,我希望它们显示1-2秒,然后消失,并有另一个数字1-2秒等。
但是,我在显示数字的同时延迟了程序的问题。我不能使用Thread.sleep,因为它会隐藏整个程序,隐藏以前的数字等等。它只是不起作用。我已经尝试过我遇到的所有其他建议,其中没有一个已经有效。
任何人都有提示吗?
答案 0 :(得分:0)
您可以使用Thread.sleep()
您遇到的问题可能是因为您正在尝试从Swing的事件调度线程更新UI。这是一个为Swing组件保留的线程,除了对UI的快速更新外,你应该不做任何事情。
public void prog() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("1");
}
}
try {
Thread.sleep(5000);
} catch(Exception e) { }
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("2");
}
}
}
public static void main(String[] args) {
label = new JLabel("0");
prog();
}
JLabel label
UI应该保持响应,因为它的组件交互应该在ActionListener中实现。但是如果你想在等待时执行其他工作,或者如果该功能包含在ActionListener的actionPerfomed()方法中,则可以启动新线程以休眠5秒然后更新UI。您还可以执行一些计算,这些计算需要5秒才能计算而不是在不阻塞UI的情况下进行休眠。代码是:
(new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (Exception e) { }
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("2");
}
}
}
}).start();
答案 1 :(得分:0)
choice