0
我是新來的Java,現在我對Threads.But工作現在我有一個很大的問題: 當我運行下面的代碼,我除了兩個圖像移動在屏幕上,但其中一個現在移動,甚至另一個不顯示。我想知道這是什麼問題: 階級敵人:圖片與非主線程不動
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Enemy extends JLabel implements Runnable{
private BufferedImage i;
private int x,y;
Enemy()
{
x=y=0;
try{
i=ImageIO.read(new File("m2.jpg"));
}catch (Exception e){}
this.setIcon(new ImageIcon(i));
this.setLocation(x,y);
this.setBounds(new Rectangle(new Point(x,y),this.getPreferredSize()));
}
Enemy(int X,int Y)
{
x=X;
y=Y;
try{
i=ImageIO.read(new File("m2.jpg"));
}catch (Exception e){}
this.setIcon(new ImageIcon(i));
this.setLocation(x,y);
this.setBounds(new Rectangle(new Point(x,y),this.getPreferredSize()));
}
public void move()
{
while(true)
{
int p=(int)Math.random()*4+1;
switch (p)
{
case 1:x++;break;
case 2:y++;break;
case 3:x--;break;
case 4:y--;break;
}
this.setLocation(x,y);
this.setBounds(new Rectangle(new Point(x,y),this.getPreferredSize()));
}
}
public void run()
{
move();
}
}
類球員:
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Player extends JLabel implements Runnable{
private BufferedImage i;
private int x,y;
Player()
{
x=y=0;
try{
i=ImageIO.read(new File("m1.jpg"));
}catch (Exception e){}
this.setIcon(new ImageIcon(i));
this.setLocation(x,y);
this.setBounds(new Rectangle(new Point(x,y),this.getPreferredSize()));
}
public void move()
{
int p=(int)Math.random()*4+1;
switch (p)
{
case 1:x++;break;
case 2:y++;break;
case 3:x--;break;
case 4:y--;break;
}
this.setLocation(x,y);
this.setBounds(new Rectangle(new Point(x,y),this.getPreferredSize()));
}
public void run()
{
move();
}
}
主類:
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
Enemy e=new Enemy(150,150);
Player p=new Player();
JFrame f=new JFrame("Test");
f.setSize(300,300);
f.setLayout(null);
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
f.add(e);
f.add(p);
Thread pThread=new Thread(p);
Thread eThread=new Thread(e);
pThread.start();
eThread.start();
while(true)
{
f.setVisible(true);
try
{
Thread.sleep(50);
}catch (Exception q){}
f.remove(p);
f.remove(e);
f.add(p);
f.add(e);
}
}
}