0
我一直在努力使两个矩形将移动取决于一些规则的迷宫。问题是我必须使用多线程和一个线程pool.I从来没有尝试过多线程和Java中有点新。我写了一些代码。我测试它。它正在工作,但是当我想要显示当前线程ID(以证明两个线程同时工作),我得到四个不同的线程数。名称我不确定它是多线程。请if你有一个想法,告诉我我必须做什么。谢谢。java swing swing与多线程
class Action extends JPanel{
Robot robot1,robot2;
public static Random rndm=new Random();
public Action() throws InterruptedException{
ExecutorService pool=Executors.newFixedThreadPool(2);
robot1=new Robot(0,560); // starts random free position
robot2=new Robot(0,560);
pool.submit(robot1);
System.out.println("rbt1 olustu");
pool.submit(robot2);
System.out.println("rbt2 olustu");
pool.shutdown();
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
robot1.MyDraw(g);
System.out.println("robot1 drawing");
robot2.MyDraw(g);
System.out.println("robot2 drawing");
}
class Robot implements Runnable{
int x;
int y;
Robot(int xCor,int yCor){
this.x=xCor;
this.y=yCor;
new Thread(this).start();
}
public void MyDraw(Graphics g){
if(end==false){
Image img1 = Toolkit.getDefaultToolkit().getImage("cat.jpg");
g.drawImage(img1, x, y,null);}
else{
g.setColor(Color.white);
g.drawRect(x, y, 40,40);
}
}
public void run() {
if(Frame.control==true){
while(true){
if(end==false){
decision(x,y);
visitedCell[x/40][y/40]+=1;
try{
Thread.sleep(300);
repaint();
}catch(Exception ex){
ex.printStackTrace();
}
System.out.println(Thread.currentThread().getId());
}
else{
Thread.currentThread().interrupt();
System.out.println("Thread dead");
Frame.button4.setEnabled(true);
}
}
(我不把这里的决定()方法的位long.it只计算新的x,y坐标)
这是可以的谢谢你。但我也想加载不同的图像到MyDraw()方法中的每个线程。例如robot1 cat.jpg,robot2 dog.jpg.I尝试了不同的东西,他们没有工作。现在我可以加载两个线程相同的图片:( – Ecrin
@ user1073777:将想要加载的图像作为参数传递给构造函数。“Runnable”实际上只关心绘图,而不是它绘制的内容。 – unholysampler
是的,它工作好主意:) – Ecrin