Sample : Timerを使ったイベント発火
実装サンプル : 4_1.Timerを使った時刻の自動更新
CAMC画面にて、ある処理を定期実行するには javax.swing.Timer
を使用します。
Timerを使う方法と、注意点をご紹介します。
Timerを使う場合の前提条件↑top
Timerは別スレッドにて処理を行う部品です。
GUI画面では ユーザの操作によるイベント(MainThread) も発生しますので、
各Thread処理が同時に実行されることによる不具合が発生しないように注意する
必要があります。
そのために以下の前提条件を満たした処理についてTimerの実装を検討してください。
- GUIから入力できるアイテム(データ)の内容は変更しないこと
- フォーカス移動が発生するようなGUIの操作をTimerから行わないこと
コンポーネントを使用不可にする処理でもフォーカス移動が発生する可能性があります。 - GUI操作からのイベント処理と Timer処理 が同じタイミングで実行されても整合性が合う
ような実装をすること
処理途中のワークデータ(処理フラグなど)を共用しない など
Timerを使用することにより発生したJava/Swing不具合、製品不具合 には サポート対応致しかねますので、注意してください。
Timerの実装方法↑top
Timerの実行はロジッククラスにて実装します。
Timer開始したいタイミングにて、ロジッククラスを設定します。
画面起動時に Timer開始 したい場合には OnLoad処理 に設定します。
Timerを開始(start())したら、必ず停止(stop()) する処理を組み込むようにしてください。
ロジッククラスには 以下のメソッドの実装ができます。
- public int getIOParameter() throws Throwable
ロジッククラス入力/出力 の設定をチェックするメソッドです - public int execute() throws Throwable
処理を行うメソッドです
Timerオブジェクトのインスタンス、開始(start()) はここで行います。 - public void exit() throws Throwable
処理終了後に呼び出されるメソッドです。
Timer実装クラスの多くはこのメソッドの実装はありません。 - public void dispose() throws Throwable
画面終了(破棄)のタイミングにて呼び出されるメソッドです。
Timer実装クラスの多くはこのメソッドにて 停止(stop()) を実装します。
通常のロジッククラスの実装では dispose() のメソッドを実装することがないため、
継承元クラス(AbstractClient) にて 実装がありますので、Override して下さい。
継承元クラスでの実装は何も無い状態になっています。