我有一个带有动作侦听器的按钮,而不是重新打开一个帧。如果我实际点击按钮它按预期工作,框架关闭,同一个框架再次打开。
我还将此操作与计时器中的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);
答案 0 :(得分:0)
根据您提供的内容,我最好的猜测是让您切换Timer
从util.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不执行任何操作,因为计时器仍处于活动状态。所以你应该丢弃帧然后取消定时器。