Ich möchte zwei Bilder mit Hilfe von Thread neu streichen, aber es immer nur Pan2 repaints. Der Bildschirm zeigt mir blauen Hintergrund und nur ein Bild. Ich habe erwartet, dass zwei Fische schwimmen.Multilingual Thread zum Repaint verwenden paintComponent
import java.awt.*;
import java.util.Random;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class demo {
public static void main(String args[]) throws IOException{
JFrame frm = new JFrame("sea");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawPanel pan = new drawPanel(50,50,1);
drawPanel pan2 = new drawPanel(100,100,2);
pan.newThread.start();
pan2.newThread.start();
frm.add(pan);
frm.add(pan2);
frm.setSize(300, 300);
frm.setVisible(true);
}
}
class drawPanel extends JPanel implements Runnable{
int X,Y,moveX,moveY,dirX=1,dirY=1;
private Image img_icon;
Thread newThread;
int a;
static int width = 300;
static int height = 300;
drawPanel (int x,int y,int num) throws IOException {
File file = new File("fish"+num+".png");
a= num;
img_icon = ImageIO.read(file);
X = x;
Y = y;
newThread = new Thread(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(Color.blue);
g.drawImage(img_icon, X, Y,this);
}
public void stop(){
newThread = null;
}
PAN1 & pan2s' Gewinde richtig funktionieren, aber pan1s' repaint funktioniert nicht.
public void run() {
while(newThread != null)
{
repaint();
try
{
Thread.sleep(50);
}
catch(InterruptedException E){ }
moveX = dirX*((int)(Math.random()*100)%3);
moveY = dirY*((int)(Math.random()*100)%3);
X = X + moveX;
Y = Y + moveY;
}
}
OMG, es funktioniert wirklich, ich bin sehr geschätzt. Und Entschuldigung für meine schlechte Java-Namensgebung, werde ich härter studieren. –