您正在检查一个固定常数值Calendar.SECOND
( 13
) 是否等于30
。显然,这永远不会是真的,所以对话框永远不会出现。您需要在Calendar
实例中检查此字段。
也使用schedule
意味着执行线程只运行一次。使用scheduleAtFixedRate
.
此外,您还需要调用showMessageDialog
以EDT
确保调用不会阻塞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);