※ ChatGPTを利用し、要約された質問です(原文:(長文です。すみません。)repaintをコードに書いてもupdateが実行されなくて困ってます。)
(長文です。すみません。)repaintをコードに書いてもupdateが実行されなくて困ってます。
このQ&Aのポイント
マルチスレッドのアプレットを作っていますが、repaintメソッドがキー入力の場合には正常に実行されますが、0.3秒毎に実行されるべき部分が実行されません。何が問題なのでしょうか?
この問題を解決するためには、runメソッド内でrepaintを呼び出す部分を修正する必要があります。
具体的には、repaintメソッドを呼び出す前にThread.sleep(300)を実行することで、0.3秒毎にrepaintが実行されるようになります。
(長文です。すみません。)repaintをコードに書いてもupdateが実行されなくて困ってます。
わざわざ見て下さってありがとうございます!
マルチスレッドのアプレットを作っています。全部書くと多すぎるので、およそのものを書きました。
●●●●プログラム本体開始●●●●
public class RPG extends Applet implements Runnable ,KeyListener {
「いくつかのフィールド」
public void init(){
「中略」
RPG hero = new RPG();
Thread heroStep = new Thread(hero);
heroStep.start();
addKeyListener(this);
}
public void run(){
while(true){
try{
Thread.sleep(300);
}
catch(Exception e){}
System.out.println("リペイント直前")
repaint();
System.out.println("リペイント通過");
}
}
public void update(Graphics g){
System.out.println("アップデイト実行");
paint(g);
}
public synchronized void paint(Graphics g){
System.out.println("ペイント実行");
「中略」
}
public void keyPressed( KeyEvent e ){
「中略」
repaint();
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}
●●●●プログラム本体終了●●●●
うまく動かなくて困っています。repaintは、キー入力をした時と、0.3秒毎にheroStepから呼び出される事にしたいのです。キー入力の場合は確実に実行されているのですが、0.3秒毎の方は全然実行してくれないのです。
コンソールを見ると、
リペイント直前
リペイント通過
と、毎回「アップデイト実行」「ペイント実行」が出力されないのです。何がいけないのでしょうか?
万が一、大切な部分を省略していたり、不足の部分がございましたら、教えて頂ければ追加で掲載致します。
どうか宜しくお願い致します。
お礼
わざわざご回答下さいましてありがとうございます! 全くPecoPlusさんのおっしゃる通りでした。まだよく分かっていない事が山のようにありそうです。でも、その分、おととい、きのうと、毎日少しずつ新しい知識が増えてる気がします。日々勉強です(笑) 最後になりましたが、早急かつ、たいへん分かりやすいご回答を下さいまして、ほんとうにありがとうございました!