JWindow - 没有显示

时间:2015-07-24 13:23:39

标签: java swing

我遇到了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,因为我想要一个没有任何边框的空窗口。

1 个答案:

答案 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();
    }
}