在延迟时间内显示JFrame

时间:2014-05-28 17:54:30

标签: java swing

我想创建一个小型Swing应用。它有2 JFrame秒。首先JFrame有一个按钮,当我点击此按钮时,第二个JFrame将会显示。第二个JFrame显示在2秒内然后处理。我想这个动作会运行很多次!我写了这段代码,但它不起作用:

 private void btnStudyActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    for( int i = 0 ; i< 10 ; i++){
        Show s = new Show();
        s.setVisible(true);
        try {
            Thread.sleep(2000);
        } catch (InterruptedException ex) {
            Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
        }
        s.dispose();
    }
}

请给我一个解决方案。

2 个答案:

答案 0 :(得分:0)

我怀疑这不起作用,因为您在事件调度线程中排除了所有这些操作。所以,如果我是你,我将尝试将代码放在一个单独的线程中(开始时你可以使用Thread类,但后来我建议使用SwingWorkers)并查看效果是否为一个你想要的。

private void btnStudyActionPerformed(java.awt.event.ActionEvent evt) {

    new Thread(new Runnable() {

        @Override
        public void run() {
            Show s = new Show();
            s.setVisible(true);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
            }
            s.dispose();
        }
    }).start();
}

我不知道循环是什么。无论如何,我建议你从Sun / Oracle教程中阅读this chapter

希望它有所帮助!

答案 1 :(得分:0)

你想要得到一种像

那样的眨眼沟通
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JFrame s = new JFrame();
    s.setSize(300, 200);
    s.add(new JLabel("Warning"));
    setVisible(true);
    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {

                try {
                    s.setVisible(false);
                    Thread.sleep(100);
                    s.setVisible(true);
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                    Logger.getLogger(ManyPopups.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            s.dispose();
        }
    }).start();
}