我需要实现一个函数,以便在单击按钮 60 秒后运行。请帮助,我使用了 Timer 类,但我认为这不是最好的方法。
原文由 Arón García Sánchez 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要实现一个函数,以便在单击按钮 60 秒后运行。请帮助,我使用了 Timer 类,但我认为这不是最好的方法。
原文由 Arón García Sánchez 发布,翻译遵循 CC BY-SA 4.0 许可协议
JDK 1.8 的异步实现:
public static void setTimeout(Runnable runnable, int delay){
new Thread(() -> {
try {
Thread.sleep(delay);
runnable.run();
}
catch (Exception e){
System.err.println(e);
}
}).start();
}
使用 lambda 表达式调用:
setTimeout(() -> System.out.println("test"), 1000);
或者使用方法参考:
setTimeout(anInstance::aMethod, 1000);
要处理当前正在运行的线程,只使用同步版本:
public static void setTimeoutSync(Runnable runnable, int delay) {
try {
Thread.sleep(delay);
runnable.run();
}
catch (Exception e){
System.err.println(e);
}
}
在主线程中谨慎使用它 - 它会在调用后暂停所有内容,直到 timeout
到期并且 runnable
执行。
原文由 Oleg Mikhailov 发布,翻译遵循 CC BY-SA 3.0 许可协议
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.7k 阅读✓ 已解决
其他答案假设您没有将 Swing 用于您的用户界面(按钮)。
如果您使用的是 Swing,则 不要 使用
Thread.sleep()
因为它会冻结您的 Swing 应用程序。相反,您应该使用
javax.swing.Timer
。有关更多信息和示例,请参阅 Java 教程 如何使用 Swing 计时器 和 课程:Swing 中的并发。