SwingWorker
メインGUI内でネストされたクラスである必要があるかどうか疑問に思っています。GUIをプログラムロジックから明確に保つために、外部クラスにしたいです。
クラスを外部にしようとしましたがSwingWorker
、これはプロセスで正常に機能しますが、残念ながら、SwingWorkerクラスからGUIフィールドにアクセスできません。SwingWorkerのメソッド内からラベルなどの属性にアクセスしようとするとdone()
、nullPointer例外が発生します。
アドバイスをいただければ幸いです。
まずはジェフ、どうもありがとうございました!あなたが提示した2番目のオプションについてはフォローできませんでしたが、これまでのところ正常に機能しています。私のバックグラウンドタスクの1つは、特定のサイズ(長い値)を計算するので、GUIからその値を取得すると便利です。
ゲッターとセッターを使用することを提案しましたが、残念ながら、SwingWorkerクラスでそれらを実装する方法がわかりません。
私はこのようにそれを試しました:
public void setSize(long totalSize) {
this.totalSize = totalSize;
}
public long getTotalSize() {
return totalSize;
}
セッターはdoInBackground()
メソッドの最後に呼び出されます。残念ながらget()
、GUIからこのメソッドを使用することはできません。
final MySwingWorker w = new MySwingWorker();
Runnable r = new Runnable() {
public void run() {
// do something with w.get()
}
};
w.setRunnable(r);
w.execute();
コンストラクターがRunnableのオブジェクトを必要とするため、私の場合、「w」のオブジェクト作成は機能しません。私は何かが足りないのですか?SwingWorkerを使用するのは初めてです。:)繰り返しになりますが、ご協力いただきありがとうございます。