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すると、エグゼキュータ スレッドが 1 回だけ実行されます。を使用しscheduleAtFixedRateます。

また、呼び出しが をブロックしないようにするにはshowMessageDialog、を呼び出す必要があります。EDTExecutor 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 に答える