2011-09-15 22 views
3

将来、特定の時刻にポップアップを表示するプログラムを作りたいと思います。今夜は5時。基本的に、プログラムは予約、会議などのためのリマインダ/通知システムですJavaの目覚まし時計

私の最初の本能は、コンピュータの時刻を1分ごとにチェックする一種の "Clock Listener"を作成して、currentTime == alarmTime。しかし、これがあまりにも多くのリソースを必要とするかどうか、あるいはあなたのプログラムが常にそうしたことをするのは悪い習慣であるかどうかはわかりません。また、アラームが正確であるためには、1分ごとではなく、1秒ごとにチェックする必要があると思います(秒をチェックしていない場合は5:00:xxになり、5 :00:59、一部の人々の好みには遅すぎるかもしれません)。毎秒時計をチェックしすぎていますか?

2番目の考えは、プログラムの実行が開始されたときに、アラームが消灯するまでの時間(たとえば、5時間)を計算することでした。次に、5時間待ってから、アラーム音を鳴らします。しかし、私は考えていませんが、ユーザーがコンピュータの時刻を変更する可能性があり、アラームが間違った時刻に消えてしまいます。これは実際には機能しません。

私はスレッドを使用するいくつかのソリューションを見てきましたが、私はまだそれらに精通していないので、それらを使用しないでください。

私は最初の解決策に傾いていますが、効率的で、他のプログラムの速度を落とさないようにしたいと思います。おそらく私はそれを考えすぎて時計をチェックするのは簡単な作業ですが、私は間違ったことをしていないことを確認したかったのです。

+0

これはデスクトップアプリケーションになるのでしょうか?はいの場合は、特定のオペレーティングシステム用にのみ開発しますか? – Bajji

+0

はい、バックグラウンドで実行され、アラームが消えるように設定されている場合にのみポップアップを実行するWindows用のプログラムであることを期待しています。 – shadow

+0

最初のものに行ってください。 GigaHertzで働いているコンピュータの場合、毎秒の時刻を確認するのは簡単です。 –

答えて

0

最初の解決策はOKです。目を覚まし、時間をチェックし、睡眠に戻ることは全く問題ではないはずです。必要に応じて毎秒確認することができますが、おそらく1分の解像度しか必要ない場合は、たとえば、 30秒ごとに

2番目の方法には、すでに概説した問題があります。残っている時間だけ眠りにつき、ユーザーが時間を変更した場合(または時間が他の手段、たとえばタイムサーバーとの同期によって変更された場合)、アラームは間違った時刻に消えてしまいます。システム時刻が変更されたときにプログラムが呼び出されるようにフックを登録できれば、これを避けることができますが、Javaではこれを簡単に実行できません。

1

スリープソリューションは非常に簡単ですが、java.util.Timerを使用することはそれほど難しくありません。複数のアラームなどのためにユーティリティを拡張する明確な方法を提供します。通知を表示するためにSwingを使用すると仮定すると、 TimerTaskは、Swingイベントスレッドでその作業の一部を実行する必要があります。 SwingUtilities.invokeAndWait(...)がそれを手伝ってくれます。

関連する問題