在Swing中,主事件调度线程(EDT)负责处理所有的用户界面更新和事件。如果你想要暂停主Swing线程直到Swing计时器结束,你可以使用javax.swing.Timer
类来实现这一功能。
javax.swing.Timer
是一个可以在指定时间间隔后触发事件的类。它通常用于执行重复的任务或在一定延迟后执行一次任务。Timer
类提供了一个简单的API来设置延迟和重复间隔。以下是一个示例代码,展示了如何使用Timer
来暂停主Swing线程直到计时器结束:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TimerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Timer Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
JLabel label = new JLabel("Timer will start in 5 seconds...");
frame.add(label);
frame.setVisible(true);
// 创建一个计时器,延迟5秒后触发一次
Timer timer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText("Timer has finished!");
}
});
// 启动计时器
timer.setRepeats(false); // 设置为不重复
timer.start();
// 确保主线程等待计时器结束
try {
Thread.sleep(5000); // 主线程休眠5秒
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println("Main thread continues after timer finishes.");
}
}
如果你遇到计时器结束后主线程没有继续执行的问题,可能是因为主线程没有正确地等待计时器结束。确保在计时器启动后,主线程有足够的等待时间。在上面的示例中,我们使用了Thread.sleep(5000)
来确保主线程等待5秒钟,这应该与计时器的延迟时间相匹配。
Thread.sleep()
时,应该捕获InterruptedException
并进行适当的处理。通过上述方法,你可以有效地暂停主Swing线程直到Swing计时器结束。
领取专属 10元无门槛券
手把手带您无忧上云