0

我正在尝试编写一个 java 代码,它将在一天中的特定时间发出警报,但我不知道我为什么会失败(请对我的问题保持温和,因为我对编程完全陌生)。我有这个代码

    new ScheduledThreadPoolExecutor(1).schedule(new Runnable() {
    public void run() {
        if(Calendar.SECOND==30)
        {
            JOptionPane.showMessageDialog(null, "Hola Amigo");
        }
    }
}, 1, TimeUnit.SECONDS);

我应该尝试刷新页面吗?请帮忙...

4

1 回答 1

2

您正在检查一个固定常数值Calendar.SECOND( 13) 是否等于30。显然,这永远不会是真的,所以对话框永远不会出现。您需要在Calendar 实例中检查此字段。

也使用schedule意味着执行线程只运行一次。使用scheduleAtFixedRate.

此外,您还需要调用showMessageDialogEDT确保调用不会阻塞Executor Thread.

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
    public void run() {
        Calendar calendar = Calendar.getInstance();
        int second = calendar.get(Calendar.SECOND);
        if (second == 30) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JOptionPane.showMessageDialog(null, "Hola Amigo");
                }
            });
        }
    }
}, 1, 1, TimeUnit.SECONDS);

如果你想ExecutorService每 30 秒调用一次而不是重复检查当前秒,你可以调用

scheduler.scheduleAtFixedRate(myRunnable, 1, 30, TimeUnit.SECONDS);
于 2013-02-09T19:15:52.413 回答