gpt4 book ai didi

带线程的 Java 定时器

转载 作者:行者123 更新时间:2023-11-29 06:13:57 29 4
gpt4 key购买 nike

我开发了一个简单的应用程序并使用了计时器,但如果我多次运行计时器,计时器会丢弃此异常:线程“AWT-EventQueue-0”java.lang.IllegalStateException 中的异常:计时器已取消。这是我的代码:

public class Main {

...
private static void createAndShowUI() {
...
//a listener of a radio button
ActionListener on_action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Timer.timer.schedule(Timer.task,0,2000); //I call the timer here
}
};
...
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}


}
//and the class of timer:
public class Timer {


public static java.util.Timer timer = new java.util.Timer();
public static java.util.TimerTask task = new java.util.TimerTask() {


public void run() {
//some tasks
}
};
}

我的问题是我在哪里使用线程?谢谢!

最佳答案

问题不在于使用 Event-Queue 线程,而是您正在重新使用已取消的 Timer。

我猜您正在使用 Timer 来做一些动画或响应按钮按下的事情(当您以固定速率安排事情时)。我还猜测在您没有向我们展示的代码中,计时器会被一个单独的事件取消。如果您曾经调用 Timer.cancel(),您能向我们展示该代码吗?

异常情况是您正在尝试使用您已经取消的同一个计时器。 Once a Timer has been cancelled, it can't be used again.

两个建议 - 每次都使用不同的计时器。此外,如果您出于 UI 目的而做事,您可能需要考虑 using a Swing timer instead .

就线程而言,所有 GUI 事件都发生在 AWT 线程上,但我再说一遍,这几乎肯定不是问题所在。 Read this for more details.

关于带线程的 Java 定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5787567/

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