電子書籍の厳選無料作品が豊富!

アプレットが動作不良となる時があます。

アプレットの定周期(1秒、2秒など)の
更新描画にて、repaint()メソッドを呼び出していますが、
Javaからupdate()メソッドが呼び出されず、画面の
描画処理が行われていない状態となっていようです。

調べたところ、アプレットのrepaint()メソッド
を呼び出すと、Javaからupdate()メソッドが
実行され、paint()メソッドに記述している
各描画処理が行われるはずですが、下記のように
実行されていないようです。

非常に困っていますので、どなたかご教授お願いします。

   repaint()
    ↓
   update()  ←なぜかJavaから実行要求が来ない
    ↓
   paint()

A 回答 (3件)

本当のところはソースコードが無いとわからないのですが、


考えられることをいくつか書きます。

・AWTはWindowsの資源(メモリの量や時間など)を
部品ごとに消費するので、
ウィンドウやGUI部品が多すぎる場合は
メモリが足りなくなってしまうかもしれません。

・ウインドウのを生成/消滅させるときに、
スレッドを消滅させずに使っていませんか。
そのとき例外が起こるかもしれません。

・JDKのバグというのも時にはあります。
JDK1.4を使ってみて、現象が起こるか確かめてください。

・どこかでオブジェクトを作りっぱなしになっていて、
javaVM内でのメモリリークが起こっているかもしれません。
java.lang.Runtime.freeMemory()を定期的に呼び出すと
診断できる場合があります。

・単純にスレッドをループとして使っている場合は違うと思いますが、
複数のスレッドのデッドロックという可能性もあります。

お力になれなかったらすみません。

この回答への補足

ご回答ありがとうございます。助かっています。

・アプレットを終了させる時、スレッドにnullをセットしているので、スレッドも終了しているものと思います。

・描画処理に対して、スレッドにより定周期間隔(sleep)のタイミングを取っているぐらいで、スレッドによる複雑な処理は行っていないものと思います。

その他ご指摘頂いた内容を確認してみようと思います。

補足日時:2004/02/07 14:56
    • good
    • 0

●AWTとSwingのどちらを使っているか。



●1秒の周期を計るしくみは何か。

補足ください。

この回答への補足

● AWTにて作成しています。
● スレッドを使用し、run()の処理でrepaint()と
sleep(1000)をコールしています。

ご回答よろしくお願い致します。

補足日時:2004/02/06 18:26
    • good
    • 0

よくわからないのですが…



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

補足日時:2004/02/06 18:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!