延迟函数调用而不在Java

时间:2015-05-01 11:52:26

标签: java delay settimeout sleep wait

我希望我的应用程序在标签中显示几秒钟然后更改。但是我不想让我的应用程序在这段时间内睡觉。它必须是功能性的。

wait()sleep()会使我的申请在此期间无效。有没有像Java中的javascript' setTimeout()那样会在一段时间后继续执行代码并执行一行?

1 个答案:

答案 0 :(得分:3)

如果您不想包含更复杂的库,可以使用javax.swing.Timer(如@VGR所述),java.util.concurrent.ScheduledExecutorServicejava.util.Timer

使用javax.swing.Timer的示例:

JLabel label = new JLabel("Hello");

Timer timer = new Timer(15000, e -> label.setText("Bye"));

timer.setRepeats(false);
timer.start();

使用ScheduledExecutorService的示例(请记住,触摸UI组件的实际逻辑可能必须从GUI线程(AWT event dispatch thread in case of Swing)运行,而不是执行程序的线程):

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
JLabel label = new JLabel("Hello");

Runnable task = () -> SwingUtilities.invokeLater(() -> label.setText("Bye"));

executor.schedule(task, 15, TimeUnit.SECONDS);

执行程序运行后台线程,因此您应该在不再需要它时将其关闭。