我遇到了JWindow的问题。
这是我的课程,包含了JWindow:
public class NextLevelCounter {
JWindow window = new JWindow();
public static void main(String[] args) {
new NextLevelCounter();
}
public NextLevelCounter() {
window.getContentPane().add(new JLabel("Waiting"));
window.setBounds(0, 0, 300, 200);
window.setVisible(true);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
window.dispose();
}
}
当我从NextLevelCounter类运行main()时它工作正常,但是当我尝试从另一个类中运行它时它没有显示。例如:
这是另一个课程:
private void isGameFinished() {
if(food.size() > 0)
return;
else if(food.size() == 0) {
timer.stop();
System.out.println("I am here");
new NextLevelCounter();
System.out.println("I am here 2");
this.level++;
}
}
“我在这里”和“我在这里2”都显示出5000ms的差异(应该如此),但窗口没有显示。
我做错了什么?
修改
我正在使用JWindow,因为我想要一个没有任何边框的空窗口。
答案 0 :(得分:2)
睡眠线程无法显示窗口。虽然它在你的第一个例子中,但这是不好的做法。使用摇摆工作者在5秒后关闭窗口:
public class NextLevelCounter {
JWindow window = new JWindow();
public static void main(String[] args) {
new NextLevelCounter();
}
public NextLevelCounter() {
window.getContentPane().add(new JLabel("Waiting"));
window.setBounds(0, 0, 300, 200);
window.setVisible(true);
//Create a worker that whill close itself after 5 seconds. The main thread
//is notified and will dispose itself when worker finishes
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
Thread.sleep(5000);
return null;
}
protected void done() {
window.dispose();
}
};
worker.execute();
}
}