私はあなたがそれでPongをプレイできるプログラムに取り組んできました。そして、私はマルチスレッド化に比較的新しいです。このコードブロックを実行すると、左上隅に小さなボックスが表示され、ボールがボックス内でバウンスし、大きな四角形が中央に表示されます。ボールは来るが、四角形はない。 "dbg.fillRect(100、150、dbWIDTH、dbHEIGHT);"Javaマルチスレッド - コード行をスキップしますか?
private void gameRender() {
if(dbImage == null) {
dbImage = createImage(dbWIDTH, dbHEIGHT);
if(dbImage == null) {
JOptionPane.showMessageDialog(null, "dbImage is null", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
else
dbg = dbImage.getGraphics();
}
dbg.setColor(Color.white);
dbg.fillRect(100, 150, dbWIDTH, dbHEIGHT);
dbg.setColor(Color.blue);
dbg.drawRect(110, 110, 10, 5);
g = getGraphics();
ball = new PongBall(g);
ball.run();
if(gameOver)
JOptionPane.showMessageDialog(null, "GAME OVER", "GAME OVER", JOptionPane.ERROR_MESSAGE);
}
ここPongBallスレッド
class PongBall extends Thread {
private boolean keepGoing;
private Graphics g;
private int x = 7, xChange = 7;
private int y = 0, yChange = 2;
private int diameter = 10;
private int rectLeftX = 0, rectRightX = 100;
private int rectTopY = 0, rectBottomY = 100;
public PongBall(Graphics graphics) {
g = graphics;
keepGoing = true;
}
public void pleaseStop() { keepGoing = false; }
public void run() {
g.drawRect(rectLeftX, rectTopY, rectRightX - rectLeftX, rectBottomY - rectTopY);
while(keepGoing) {
g.setColor(Color.white);
g.fillOval(x, y, diameter, diameter);
if(x + xChange <= rectLeftX)
xChange = -xChange;
if(x + xChange >= rectRightX)
xChange = -xChange;
if(y + yChange <= rectTopY)
yChange = -yChange;
if(y + yChange >= rectBottomY)
yChange = -yChange;
x = x + xChange;
y = y + yChange;
g.setColor(Color.red);
g.fillOval(x, y, diameter, diameter);
try {
Thread.sleep(50);
}
catch(InterruptedException e) {
System.err.println("sleep exception");
}
}
}
} あなたはおそらく、見ることができるようですball.run()は単に実行されます。私がやっていないことがありますか?これをどのように修正できますか?
また、私は新しいstackoverflow.comです。もしあまりにも少なすぎるコードを与えたり、何かが間違っていたら、私はお詫びします。
これは 'start()'を呼び出すのではなく、 'PongBall'で' run() 'を呼び出すだけなので、実際には複数のスレッドを含むようには見えません。 UIの更新は単一のスレッドで行う必要があるので、おそらく良いことに注意してください。私はあなたの問題はイメージを作成しているに過ぎず、実際に画面にレンダリングしていないということです。 – dlev
私はそれを画面にレンダリングします。私はそれをテストしている間に "ball.run()"コード行を削除し、四角形が現れましたが、そのコード行では表示されません。しかし、1つのスレッドがUIを更新する必要があるというヒントをありがとう – kullalok
あなたのボールは矩形の上に描かれていて、それを消去していると思います。デバッガを使用して何が起こっているかを確認してください。なぜなら、現在はスレッドが1つしかないからです。 –