• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:repaint処理が実行されなくなる時があります)

repaint処理が実行されなくなる原因と回避策

このQ&Aのポイント
  • repaint処理が実行されなくなる原因を調査しました。
  • この問題の回避策についても考えました。
  • 具体的な原因は特定できませんでしたが、いくつかの原因が考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

こんにちは。 断言はできませんが、 やっぱりスレッドが悪さをしているような気がしてなりません。 Componentのソースコードを見ると、repaint()は 直接update()を呼び出すわけではなく、 イベントキューに描画処理をまかせる働きをしています。 AWTの描画処理で、他の場所でなにか変なことが起こっているように思います。 m_bLoopFlagについてですが、 これはvolatileとして宣言しているか、 または変更時にsynchronizedメソッドを使っているでしょうか。 そうでない場合、スレッド間で変数の整合性がとれなくなって(同一の変数でも)、 動作がおかしくなることがあります。 (『Javaの鉄則』p.219 ピアソン発行) 宣言時にvolatileをつけてなければ、ためしてみてください。

Pichi
質問者

お礼

volatileをつけて確認しましたが駄目でした。その後の調査の結果、repaintの途中?のRMI通信部分でエラーとなってpaint処理が実行されていないことがわかりました。いろいろとご回答頂き、ありがとうございました。

その他の回答 (1)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

>finally { >m_bEndFlag = true; >} この記述が、かなり謎めいてないか? こんな所(finallyブロック)でフラグ値を設定する意味は、何だろう。 m_bEndFlagの使用目的(プログラム内における機能)は? このフラグを用いて、具体的にはどういったことをさせたいの? >repaint処理が実行されなくなる >ことがあります。repaintからupdateが呼び出されて >いないことまでは判った 「repaint()が呼び出されている」ことはどうやって判断したのかな? そもそもrepaint()自体が、呼び出されていないのでは? ------------------- なんにせよ、run()メソッドだけ掲示されても、 当てずっぽうでしか答えられないんだけどね。

Pichi
質問者

お礼

ご回答ありがとうございます。確かにrun()メソッドだけではわかりませんね。申し訳ありません。その後の調査でRMI通信部分でエラーとなってpaintされていないことがわかりました。

関連するQ&A

専門家に質問してみよう