ミラーサイト作りました。今後はそちらをメインにするかも知れません。よろしくお願いします。

あれこれ備忘録 〜はてなブログ支店〜

もしもドロップシッピング」で販売サイト作ってみました。
あれこれ商店

画期的な無料家計簿アプリでお金の流れが一目で分かる

2011年06月09日

Swingのコンポーネント変更・再描画

Swingのコンポーネントの大きさを変更したり、文字を表示させたり、画像を更新したりするときにはイベントディスパッチスレッドで行われなければならないそうです。

別スレッドで何か処理をした結果をコンポーネントに反映させようと思ったとき、このことが問題になります。

Swing とスレッド

[java][swing] Swingスレッド処理-004(SwingWorkerについて) いろいろ備忘録日記

[Java][Swing] イベントディスパッチスレッド以外のスレッドからのイベントディスパッチスレッドへのアクセス yuu_nkjm blog

ということで、結論としては

SwingUtilities.invokeLater()を使うか、SwingWorkerを継承したクラスを作ってここで処理したいものをdoInBackground()で、その後のコンポーネントの変更処理をdone()で定義して使う。

ということになるのでしょう。

ある大元のクラスでJFrameを呼び出して、大元のクラスで処理された結果をJFrameで渡すときにはどうするのでしょうか?

JFrameを継承したSomeFrame frameを作って、処理結果を

frame.doSomething(String someVariable);


のようにして、渡すとき

doSomething(String str) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
setTitle(str);
}
});
}


のような感じにすると、new Runnable()という内部クラスでfinalでない変数strを参照できないというエラーになります。

これはどうすればいいのでしょうか?

こういうことを考えなければいけないようなクラスの作り方をしている事自体がダメなんでしょうが。。。
posted by まっさん at 01:01 | Comment(0) | java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


iPagerank ブログランキング・にほんブログ村へ
にほんブログ村 ランキングはこちらをクリック!

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。