定时JDialog在指定时间后没有关闭

时间:2016-05-26 06:56:22

标签: java swing

我正在搜索定时的JDialog,它会在指定的时间过后消失,找到的代码运行正常。

            JFrame f = new JFrame();
            final JDialog dialog = new JDialog(f, "Test", true);
            Timer timer = new Timer(2000, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    dialog.setVisible(false);
                    dialog.dispose();
                }
            });
            timer.setRepeats(false);
            timer.start();

            dialog.setVisible(true);

但是在更改下面的代码后无法正常工作,即在指定的时间过后,模态没有被关闭:

                JFrame f = new JFrame();
                final JDialog dialog = new JDialog(f, "Test", true);

                dialog.setVisible(true);

                Timer timer = new Timer(2000, new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        dialog.setVisible(false);
                        dialog.dispose();
                    }
                });
                timer.setRepeats(false);
                timer.start();

我无法理解为什么会这样。如果有人解释原因,那将是非常有帮助的。

提前致谢。

1 个答案:

答案 0 :(得分:2)

因为在第二个程序中,当对话框是模态时,dialog.setVisible(true);的调用被阻塞,即执行在那里停止,直到你关闭对话框。因此,在手动关闭对话框之前,计时器不会启动。第一个程序是解决方案。为什么要做第二个?