-2
Javaスレッドを使用してボールをバウンスするコードを記述しました。しかし、私はそれをクリアすることはできません/ボールが下に移動するときにそれをリフレッシュする。フレームをリフレッシュするJavaスレッドの問題
import java.awt.*;
class myFrame extends Frame {
public void paint(Graphics g) {
try {
for (int i = 10; i <= 400; i++) {
g.drawOval(100,i+100,50,50);
update(g);
repaint();
Thread.sleep(500);
}
} catch(Exception ex) {
System.out.println(ex);
}
}
}
class BallTest {
public static void main(String cp[]) {
myFrame mf = new myFrame();
mf.setSize(500,500);
mf.setVisible(true);
}
}
ありがとうRoberto。それは私の問題を解決した。しかし、私は理解していません。ああ!!!それは消しゴムとして働いているかもしれない...? – ShailendraRPhadke
わからないことはよく分かりませんが、もっと説明しようと思います。あなたのpaint()では、あなたはupdate()を呼び出していました。理由は分かりませんが、ここで確認できます:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/Component.java#Component .update%28java.awt.Graphics%29では、update()の実装は実際にpaint()を呼び出します。これはあなたが無限回帰(paint())を呼び出すupdate()を呼び出すpaint()を呼び出していることを意味します。それがあなたのコードが最終的に例外を投げていた理由です。 –
更新プログラムを削除すると、コードの種類は機能しますが、円が描画されるたびに前回の円と重なって表示されます。 g.clearRect呼び出しが行うフレーム領域をクリアしないようにします。 clearRectへの引数は、getBounds()が返すコンポーネントの境界を表すx、y、およびheightです。 まだ不明な点がある場合は教えてください。 –