Java 中的 javascript setTimeout 等效于什么?

新手上路,请多包涵

我需要实现一个函数,以便在单击按钮 60 秒后运行。请帮助,我使用了 Timer 类,但我认为这不是最好的方法。

原文由 Arón García Sánchez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

“我使用了 Timer 类,但我认为那不是最好的方法。”

其他答案假设您没有将 Swing 用于您的用户界面(按钮)。

如果您使用的是 Swing,则 不要 使用 Thread.sleep() 因为它会冻结您的 Swing 应用程序。

相反,您应该使用 javax.swing.Timer

有关更多信息和示例,请参阅 Java 教程 如何使用 Swing 计时器课程:Swing 中的并发

原文由 DavidPostill 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题