您正在检查一个固定常数值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);