doClick()没有丢帧

时间:2017-07-20 11:31:16

标签: java button timer actionlistener

我有一个带有动作侦听器的按钮,而不是重新打开一个帧。如果我实际点击按钮它按预期工作,框架关闭,同一个框架再次打开。

我还将此操作与计时器中的doClick()相关联。当动作发生时,它会打开一个新框架而不会丢弃另一个框架。计时器本身可以完美运行。

这是什么原因,我该如何解决?这是计时器的问题还是通过doClick调用它?

我对这一切都比较新,所以这可能是一个简单的问题。感谢

按钮代码:

frmStart s = new frmStart();
        s.setVisible(true);
        this.dispose();

doClick代码(更改为布尔值):

Timer t = new Timer();
t.schedule(new TimerTask() {

        @Override
        public void run() {
            if(change) {
            btnReload.doClick();
            }

        }
    }, 400);

2 个答案:

答案 0 :(得分:0)

根据您提供的内容,我最好的猜测是让您切换Timerutil.Timer导入javax.swing.Timer

然后你会像这样实例化它:

Timer t = new Timer(400, (e)->{
    if(change)
        btnReload.doClick();
});

然后开始

t.start();

与Swing Thread之外的swing对象进行交互并不是一个好主意,有时甚至不会工作。使用javax.swing.Timer时,它在Swing Thread

中运行已定义的功能

答案 1 :(得分:0)

Dispose不会杀死帧。引用:

  

释放此Window使用的所有本机屏幕资源   子组件及其拥有的所有子组件。也就是资源   对于这些组件将被销毁,他们消耗的任何内存都将被销毁   返回操作系统,它们将被标记为不可显示。

帧自身处于活动状态,直到GC启动。并且GC不执行任何操作,因为计时器仍处于活动状态。所以你应该丢弃帧然后取消定时器。