gpt4 book ai didi

Java定时器: Terminating under weird circumstances,解释?

转载 作者:行者123 更新时间:2023-12-01 21:30:46 25 4
gpt4 key购买 nike

我正在编写一个非常简单的程序,每 5 分钟执行一次操作。我目前正在尝试设置一个计时器并通过简单地让它增加一个数字来测试它。我从相关问题中复制了一些代码,包括相关代码(CIQ),最终得到以下内容。我注意到一种我一生都无法解释的行为:

如果 CIQ 保持不变,程序将按预期运行,无论延迟值是多少。然而,如果 CIQ 被删除,就像我试图做的那样,为了切断我不需要的部分,例如窗口,程序会在值大约 < 900 时自行停止。它运行了一个小时,运行得很好800,它会数到 1000 大约二到三,并且对于任何更高的值都终止而不增加。这里发生了什么?据我了解,CIQ是指定一个虚拟窗口的样式,然后将其打包。这与在后台运行的计时器有什么关系?为什么会在所描述的值范围内发生这种情况?我读过 JFrame 是 Swing 的顶级容器,但如果 Swing 的东西需要它才能工作,为什么计时器有时在没有它的情况下也能工作?这与垃圾收集或其他什么有关吗?

时间:

    public class Time {

public Time() {
EventQueue.invokeLater(() -> {
//<codeInQuestion>
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
//</codeInQuestion>

ActionListener taskPerformer = new ActionListener() {
int testCount = 0;

public void actionPerformed(ActionEvent evt) {
System.out.println("Time passed: " + testCount);
testCount++;
}
};
Timer timer = new Timer(1000, taskPerformer);
timer.start();
});
}
}

主要:

    public class Main {
public static void main(String[] args) {
Time timer = new Time();
}
}

最佳答案

the program stops all by itself for values roughly < 900.

只有事件调度线程启动后,应用程序才会继续运行。

由于您没有使框架可见,因此 GUI 没有理由继续执行。

定时器在触发时将事件放置在 EDT 上。对于 < 900 的值,计时器会在 GUI 关闭之前触发,以便启动事件调度线程。

您的 CIQ 还必须向 EDT 添加一些事件,以防止 GUI 关闭。

关于Java定时器: Terminating under weird circumstances,解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com