You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java代码行之间设置等待时长?附JOptionPane弹窗场景示例

在两个Swing弹窗之间添加2小时等待的解决方案

嘿,我来帮你搞定这个需求!在Swing里直接加等待得注意线程问题,不然会把界面卡死,下面给你两种靠谱的方案,你可以根据情况选:

方案1:后台线程 + Thread.sleep()(适合需后台操作的场景)

如果等待期间你还想跑点别的后台任务,这个方案更灵活。但要记住绝对不能直接在Swing的事件调度线程(EDT)里sleep,不然整个界面会冻住,用户啥操作都做不了。

代码示例:

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class WaitExample {
    public static void main(String[] args) {
        // 显示第一个提示框
        JOptionPane.showMessageDialog(null, "2 hours left");

        // 开个新线程处理等待逻辑
        new Thread(() -> {
            try {
                // 把2小时转换成毫秒:2*60分钟*60秒*1000毫秒 = 7200000
                Thread.sleep(7200000);
                
                // 等待结束后,必须回到EDT更新UI(Swing组件只能在EDT里操作)
                SwingUtilities.invokeLater(() -> {
                    JOptionPane.showMessageDialog(null, "2 hours ago");
                });
            } catch (InterruptedException e) {
                // 处理中断异常,比如打日志或者做清理
                e.printStackTrace();
            }
        }).start();
    }
}

方案2:Swing Timer(推荐!更简洁安全)

Swing自带的Timer是专门为UI定时任务设计的,它会自动在EDT上执行任务,不用手动处理线程切换,代码更干净,也符合Swing的规范。

代码示例:

import javax.swing.JOptionPane;
import javax.swing.Timer;

public class SwingTimerExample {
    public static void main(String[] args) {
        // 显示第一个提示框
        JOptionPane.showMessageDialog(null, "2 hours left");

        // 设置延迟时间:2小时 = 7200000毫秒
        int twoHoursInMillis = 2 * 60 * 60 * 1000;
        
        // 创建定时器,只执行一次
        Timer timer = new Timer(twoHoursInMillis, e -> {
            // 时间到了显示第二个提示框
            JOptionPane.showMessageDialog(null, "2 hours ago");
        });
        timer.setRepeats(false); // 确保只触发一次
        timer.start();
    }
}

方案选择建议

  • 如果只是单纯等时间弹第二个框,优先选Swing Timer,代码更简洁,也不会踩线程的坑;
  • 如果等待期间需要执行后台任务(比如监控文件变化、同步数据),就用后台线程的方案。

另外要注意:如果程序在等待期间被关闭了,第二个弹窗就不会显示了,要是需要程序保持运行,得确保线程是守护线程或者处理好关闭逻辑哦~

内容的提问来源于stack exchange,提问作者user12312714

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:39:07