【问题标题】:JDialog doesn't disposeJDialog 不处理
【发布时间】:2016-06-08 05:22:05
【问题描述】:

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

问题是,我正在使用 Swing 调色板创建一个分配,我使用 JDialog 在另一个框架的同时显示一个计时器,当我将此框架更改为另一个框架并返回到前一个 JDialog 中的计时器与第一个正在运行的计时器重叠,我无法修复它。

这是代码。

主要

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

}

第一帧

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 与其数据重叠(你可以看到时钟的数字重叠)。

【问题讨论】:

标签: java swing dispose jdialog


【解决方案1】:

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

我假设您想重复使用我们的弹出窗口 - 这很好,但我认为您忘记停止“已处置”计时器,因此您在操作中创建的每个新计时器都将暴露于所谓的“比赛条件” .

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

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

简单地说:您有多个计时器更新同一个文本字段。

解决方案:在运行新计时器之前停止之前的计时器,或者重新启动之前的计时器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多