我想用Swing编写一个多线程程序。从本质上讲,程序的工作原理是,当它运行时,它会有一个机器人(用截图中的一个圆圈表示),它在一个领域中四处探索。这个机器人应该由它自己的线程来控制。该程序有一个按钮“发射机器人”,将在现场创建另一个机器人(最多可以说10)。现在我有了该程序的基础知识,但它全部在一个线程下运行。我可以根据需要启动尽可能多的机器人,但它们都在单个线程下运行。但我希望当我点击“启动机器人”时创建一个独立的线程并控制该机器人。这是程序的外观如何,现在: Swing的多线程
自从长了一点,我不会张贴整个程序。但是,启动并更新机器人的方法(目前控制场上唯一一个机器人)如下:
public void gameStart(){
Thread gameThread = new Thread(){
public void run(){
while(true){
//execute one time step for the game
gameUpdate();
//refresh screen
repaint();
//give other threads time
try{
Thread.sleep(1000/UPDATE_RATE);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
};
gameThread.start();
}
我的问题是如何实现多线程对这样的情景?我知道SwingWorker
的基础知识,但由于我没有做过任何多线程,我不知道如何让多个线程工作并由一个线程更新(由线程控制的机器人的更新位置)。
编辑:只是为了说明我的观点,这是我正在研究的一个项目。这并不是说在这种情况下多线程是否有意义。
我不会。对于你创建的每个新的'Robot',你都会创建一个新的'Thread',这不会很好地扩展。更好的解决方案是使用'gameUpdate'方法遍历'Robot'的'List'并遍历它们的更新逻辑,并且更新屏幕 – MadProgrammer
@MadProgrammer I更新问题以反映这一事实这是我正在研究的一个项目。所以我需要按照我描述的方式来实现它。 – aaa
接下来是一个问题,Swing是单线程的,如果机器人在Swing想要绘制时更新它的位置,则必须完成一个绘制点,那么就会冒着脏更新的风险。你的问题没有意义。如果你有一个'Thread'来控制每个'Robot',那么为什么你需要协调它们呢?让他们跑,做那件事。你真的有问题让他们渲染 – MadProgrammer