- ベストアンサー
アプレットの動作不良についての質問
- アプレットの定周期の更新描画にて、repaint()メソッドを呼び出すと、Javaからupdate()メソッドが実行されず、画面の描画処理が行われていない状態となっています。
- 調べたところ、アプレットのrepaint()メソッドを呼び出すと、Javaからupdate()メソッドが実行されず、各描画処理が行われないようです。
- アプレットの動作不良に困っており、誰か解決策をご教授いただける方がいらっしゃいましたら、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
本当のところはソースコードが無いとわからないのですが、 考えられることをいくつか書きます。 ・AWTはWindowsの資源(メモリの量や時間など)を 部品ごとに消費するので、 ウィンドウやGUI部品が多すぎる場合は メモリが足りなくなってしまうかもしれません。 ・ウインドウのを生成/消滅させるときに、 スレッドを消滅させずに使っていませんか。 そのとき例外が起こるかもしれません。 ・JDKのバグというのも時にはあります。 JDK1.4を使ってみて、現象が起こるか確かめてください。 ・どこかでオブジェクトを作りっぱなしになっていて、 javaVM内でのメモリリークが起こっているかもしれません。 java.lang.Runtime.freeMemory()を定期的に呼び出すと 診断できる場合があります。 ・単純にスレッドをループとして使っている場合は違うと思いますが、 複数のスレッドのデッドロックという可能性もあります。 お力になれなかったらすみません。
その他の回答 (2)
- liar_adan
- ベストアンサー率48% (730/1515)
●AWTとSwingのどちらを使っているか。 ●1秒の周期を計るしくみは何か。 補足ください。
補足
● AWTにて作成しています。 ● スレッドを使用し、run()の処理でrepaint()と sleep(1000)をコールしています。 ご回答よろしくお願い致します。
- liar_adan
- ベストアンサー率48% (730/1515)
よくわからないのですが… AWTとSwingでいくらか状況が違うので、 JDKのバージョンと、どちらを使っているか補足してください。 #Swingでは通常、paint()はオーバライドせず、 かわりにpaintComponent()を使い、 先頭でsuperの同メソッドを呼び出しますが、 それは大丈夫ですね? また、周期を計るしくみを教えてください。 スレッドか、utilのTimerか、SwingのTimerか。
補足
すみません。補足します。 <現象> クライアントPCのIEブラウザ上のJavaアプレットにて、 1秒周期で画面の描画処理を行っているのですが、 Javaアプレットの画面を複数起動させた時に、 repaint()をコールしているにもかかわらず、 update()メソッドが呼ばれなくなってしまい、 描画処理が行えない現象に陥ってしまう場合があります。 (Javaアプレットの画面を複数起動させない場合は、 本現象が発生しない時もあります。) <実行環境> (1)サーバPC Windows2000(SP3) Server JSDK 1.3.1.03 Apache 1.3.24 Tomcat 3.3a J2RE 1.3.1_03 (2)クライアントPC Windows98 及び Windows2000 J2RE 1.3.1_03
補足
ご回答ありがとうございます。助かっています。 ・アプレットを終了させる時、スレッドにnullをセットしているので、スレッドも終了しているものと思います。 ・描画処理に対して、スレッドにより定周期間隔(sleep)のタイミングを取っているぐらいで、スレッドによる複雑な処理は行っていないものと思います。 その他ご指摘頂いた内容を確認してみようと思います。