我希望我的应用程序在标签中显示几秒钟然后更改。但是我不想让我的应用程序在这段时间内睡觉。它必须是功能性的。
wait()
和sleep()
会使我的申请在此期间无效。有没有像Java中的javascript' setTimeout()
那样会在一段时间后继续执行代码并执行一行?
答案 0 :(得分:3)
如果您不想包含更复杂的库,可以使用javax.swing.Timer
(如@VGR所述),java.util.concurrent.ScheduledExecutorService
或java.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);
执行程序运行后台线程,因此您应该在不再需要它时将其关闭。