<<<<< なが〜い処理でも固まらないウインドウの作り方 >>>>>

[Version3: 処理終了を通知できるバージョン]
次に、なが〜い処理が終了したら、それを通知できるGUIアプリケーションを用意しました。

ここでは、Observerパターン[GoF]を用いています。

Observerパターンは、イベント処理でも使われていますが、
なんらかの変更を通知するオブジェクトと、その変更を受け取って処理するオブジェクトに分かれます。
ボタンのイベント処理なら、「ボタンをクリックした」という変更を通知するオブジェクト(JButton)と、
「ボタンがクリックされた」という変更を受け取って処理するオブジェクト(ActionListener)に分かれます。

今回の場合は、「なが〜い処理が終了した」という変更を通知するオブジェクト(LongProcessThread)と、
「なが〜い処理が終了した」という変更を受け取って処理するオブジェクト(MyButtonListener)に分かれます。(下図参照)

Observerパターンを適用したことで、MyButtonListenerは、
ボタンのクリック処理と、なが〜い処理の終了処理の、二つを行うことができるわけです。
以下のクラス宣言が、まさにそれを表しています。
public class MyButtonListener implements ActionListener, Observer

インタフェース名 監視(Observe)対象 イベント処理記述メソッド
ActionListener ボタンのクリックを監視する actionPerformed
Observer なが〜い処理の終了を監視する update

ただ、MyButtonListerのupdateメソッドを見れば分かるように、
コンソールに表示しかできてません。
これを画面に表示できるようにするのが、次のバージョンです。

<<< [Version2: ウインドウが固まるバージョン] >>> [Version4: 処理終了を画面に表示できるバージョン] [Top]