- ★★Java質問・相談スレッド171★★
873 :デフォルトの名無しさん[sage]:2014/12/18(木) 09:23:52.17 ID:pWVc1HJk - 描画関連命令を発行する複数のクラスとそれを処理する1つのクラスがあります。
命令の処理順序が変わってしまわないように、 repaint関連の実行が終わるまで次の命令に行かないようにフラグを作ることにしました。 repaintを呼ぶメソッドで呼ぶ前にフラグをtrueにして描画が終わったらfalseにするようにし、 呼んだ後フラグがfalseになるまで待たせることにしました。 色変更命令と文字描画命令を交互にそれぞれ7つ発行・実行しようとしたところ 文字描画の3つ目の実行で無限ループのようになってしまいました。 どのようにするのがよいのでしょうか?
|
- ★★Java質問・相談スレッド171★★
879 :873==641[sage]:2014/12/18(木) 18:36:55.51 ID:pWVc1HJk - >>877
その通りです。 いろいろあって間があいてしまったこともあって書かなかったのですが、 以前>>641で描画系の質問をした人です。 描画をよそでやるのではなくきちんとJPanelのpaintComponentにやらせようと思い、 まずJPanelを親クラスに持つクラス(Canvasクラス)を作りました。 例えば文字描画を複数回させたいときは、 まず文字描画に必要なパラメータをCanvasクラスのdrawCanvasメソッドに渡します。 drawCanvasではそのパラメータをフィールドに記憶させてrepaintを呼びます。 paintComponentではそのフィールドを見て指定された位置に指定されたものを描画します。 paintComponentが呼び出されるのはそのすぐ後とは限らないので、 そのままではその間に次の命令が実行されるかもしれないですよね? drawCanvasメソッドが終わるまで次の命令が実行されることはないので、 paintComponentで描画が終わるまでdrawCanvasを終えないことにしようとしました。 ですが、現状同期処理や排他的処理の方法があまりよくわかっていません。 synchronized等について調べてみます。
|
- ★★Java質問・相談スレッド171★★
883 :873==641[sage]:2014/12/18(木) 21:29:20.09 ID:pWVc1HJk - >>880
まだまだわからないことや悩んでることもあり、 大丈夫とは言えないかもです・・・; >>882 画面のサイズが可変なので画像用意するのは・・・とか思っていましたが、 やはり描画命令分をまず画像に描画してそれをpaintComponentで画面のJPanelに描画するようにします。
|