ページの先頭行へ戻る
Interstage Studio J Business Kit GUIライブラリ ユーザーズガイド
FUJITSU Software

1.2.2 イベントリスナで処理を実装する

Javaでは、ユーザの操作など(例:マウス入力やキー入力)が発生したとき、AWTイベントディスパッチスレッド上で、GUIコンポーネントを処理(例:描画処理やサイズ変更)し、開発者が実装したイベントリスナを呼び出します。イベントリスナで処理を実装する際、以下の点を考慮してください。

AWTイベントディスパッチスレッド以外のスレッドから直接GUIコンポーネントを操作しない

GUIコンポーネントのほとんどのメソッドは、スレッドセーフではありません。AWTイベントディスパッチスレッド以外のスレッドから直接GUIコンポーネントのメソッドを実行してはいけません。

以下のメソッドを使用することにより、AWTイベントディスパッチスレッド上で非同期的にGUIコンポーネントのメソッドを実行することができます。

この考慮がされていないと、AWTイベントディスパッチスレッドと別スレッドが同時にGUIコンポーネントにアクセスすることにより、GUIコンポーネントに内部矛盾が発生し、GUIコンポーネントの動作に支障をきたすことがあります。

必ず正常に処理を完了させる

イベントを処理する際には、あらゆる例外をすべてキャッチし、正しく処理し、必ずイベント処理を終わらせるようにする必要があります。

スレッドでキャッチしなかった例外があると、AWTイベントディスパッチスレッドが停止してしまい、イベントを配送できなくなります。

膨大な時間を要する処理は別スレッドで行う

イベントを処理している間にも、ユーザ操作などにより、イベントが次々と発生します。AWTイベントディスパッチスレッド上で、膨大な時間を要する処理を行うと、イベントが溜まり、GUIコンポーネントの動作に支障をきたす場合があります。

このような場合は、別スレッドを起動して、膨大な時間を要する処理を行ってください。

イベントの発生順やそのタイミングに依存しない処理を実装する

イベントの発生順やタイミングは一定ではありません。GUI操作などで発生するイベントは非同期に発生するだけでなく、その発生順にイベントキューに格納されるとも限りません。

また、OSの種類やJDK/JREのバージョンによって、イベントの発生順が前後することがあります。そのため、イベントリスナでは、イベントの配送順に依存しないプログラミングを行ってください。