JDialog不会处置

时间:2016-06-08 05:22:05

标签: java swing dispose jdialog

我是编程新手,我遇到了一些麻烦。

问题是,我正在使用Swing调色板来创建一个赋值,我正在使用JDialog在另一帧的同一时间显示一个计时器,当我将此帧置于另一帧并返回到在前一个JDialog中的计时器与正在运行的第一个计时器重叠,我无法设法修复它。

这是代码。

MAIN

public static void main(String[] args) {
    Panel0 screen=new Panel0();
    screen.setTitle("");
    screen.setLocationRelativeTo(screen);
    screen.setVisible(true);

}

第1帧

public class Panel0 extends javax.swing.JFrame {
Panel s=new Panel();

private void fisica1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
    s.time();
    s.setTitle("FISIC I");
    s.setLocationRelativeTo(s);
    s.setVisible(rootPaneCheckingEnabled);
    s.dialog.setVisible(rootPaneCheckingEnabled);
    dispose();
}          

第二帧

public class Panel extends javax.swing.JFrame {    

private void EndActionPerformed(java.awt.event.ActionEvent evt) {                                    
    dialog.dispose();
    dialog.setDefaultCloseOperation(0);

    Panel0 pan=new Panel0();
    pan.setLocationRelativeTo(p1);
    pan.setVisible(rootPaneCheckingEnabled);
    dispose();

}   

void time(){        

    t=new Timer(1,new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (startTime<0) {
                startTime=System.currentTimeMillis();                    
            }                
               long now = System.currentTimeMillis();
               long clockTime = now - startTime;                
            if (clockTime >= duration) {
                    clockTime = duration;
                    t.stop();
            }                
             SimpleDateFormat sdf=new SimpleDateFormat("mm:ss:SS");
                              clock.setText(sdf.format(duration-clockTime));                                  


       }
    });        
    t.setInitialDelay(0);            
                if (!t.isRunning()) {
                    startTime = -1;
                    t.start();
                }
}

我省略了Timer的初始化等等,因为我认为这不是问题所在。

澄清一些事情:一旦我关闭第二帧,第一帧打开并给我选项反复重复此过程,每次名为“对话框”的JDialog与其数据重叠(您可以看到时钟重叠的数字) )。

1 个答案:

答案 0 :(得分:0)

dispose()并不意味着您将“销毁”对象或清除其状态。这意味着您将释放附加到该帧的图形资源(低级窗口句柄和东西)。它仍然可以与setVisible(true)

一起使用

我认为你想要重复使用我们的弹出窗口 - 这很好,但我认为你忘记停止“处置”计时器,因此你在行动中创建的每个新计时器都将暴露于所谓的“赛车条件” 。

定时器是简单的后台任务,必须明确停止 - 它本身不会完成。

每次拨打s.time();都会启动新的计时器而不会停止前一个计时器。

简单来说:您有多个计时器更新相同的文本字段。

解决方案:在运行新的OR重新启动前一个计时器之前停止上一个计时器。