线程java-可以重新初始化吗?

线程java-可以重新初始化吗?,java,multithreading,game-engine,Java,Multithreading,Game Engine,我正在编写一个小游戏,其目标是管理一个购物中心。我的问题是动画 实际上,我的同事创建了类Animateur,它扩展了Thread并实现了Runnable 在我的框架中,我声明并初始化这个类,按下一个按钮,我需要他的run()来执行 动画由来自购物中心一边的人组成,他们买了东西,然后离开了另一边 要开始一天,我需要调用run()方法 推完车后的第一天,一切都很完美:我看到了人和所有人。但当我第二次按同样的按钮,开始新的一天时,任何事情都起作用,我就卡住了。 我无法播放,因为我无法开始新的一天-下次

我正在编写一个小游戏,其目标是管理一个购物中心。我的问题是动画

实际上,我的同事创建了类
Animateur
,它扩展了
Thread
并实现了
Runnable

在我的框架中,我声明并初始化这个类,按下一个按钮,我需要他的
run()
来执行

动画由来自购物中心一边的人组成,他们买了东西,然后离开了另一边

要开始一天,我需要调用
run()
方法

推完车后的第一天,一切都很完美:我看到了人和所有人。但当我第二次按同样的按钮,开始新的一天时,任何事情都起作用,我就卡住了。 我无法播放,因为我无法开始新的一天-下次执行
Animateur
类中的
run()

有人能帮我一下或给我一些解决这个问题的方法吗(

packagemymall;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JOptionPane;
公共类Animateur扩展线程实现可运行{
private int giorno=1;
私密的地理信息=1;
专用int延迟=30;
私家车内勤nbVisiteurs=0;
私有int k=0;
私人双收益日元;
公共购物中心;
public List w=new ArrayList();
public List e=new ArrayList();
公共整数[]r=新整数[6];
公共动画师(蒙代尔k){
这个m=k;
m、 setGainmoyen((int)this.gainmoyen);
m、 设置visitestructure(this.r);
}
公共空间{
这个.giornottuale++;
}
公开募捐{
while(m.isSimulation()){
if(giorno 12000){//Pb con el number o de clients entrados pero solucable
m、 设置模拟(假);
//m、 setlistemps(e);
//m、 设置列表访问中心(w);
此.e=m.listemps;
this.w=m.listedvisiteurcentres;
this.gainmoyen=this.gainmoyen/this.nbVisiteurs;
对于(元素e:m.目的地){
if(倩碧实例){
r[0]++;
}else if(如商业通用实例){
r[1]++;
}else if(例如商业规范的实例){
r[2]++;
}else if(例如乐趣的实例){
r[3]++;
}否则如果(例如恢复实例){
r[4]++;
}否则如果(例如健身房){
r[5]++;
}
}
System.out.println(m.isSimulation());
(new JOptionPane()).showMessageDialog(null,“Journee finie”,“Fin!”,JOptionPane.INFORMATION_MESSAGE);
试一试{
Thread.sleep(这个延迟);
}捕捉(中断异常e){
}
}
//m、 notifyFin();//没有函数吗?
}
giorno++;
}
}
}
我试图销毁创建的线程并在单击时初始化一个新线程,但没有成功

编辑:


谢谢。要使用executor服务,我只需要实现这个类来代替
可运行的

不要扩展线程。相反,我会使用executor服务。您可以多次向它提交任意数量的可运行的。例如

您可以创建一个执行器服务,如

ExecutorService es = Executors.newSingleThreadExecutor();
您可以提交一个任务,如

Runnable myRunnable = new MyRunnable();

es.submit(myRunnable);
并再次提交

es.submit(myRunnable);

不要扩展线程。相反,我会使用ExecutorService。您可以多次向它提交任意数量的可运行文件。例如

您可以创建一个执行器服务,如

ExecutorService es = Executors.newSingleThreadExecutor();
您可以提交一个任务,如

Runnable myRunnable = new MyRunnable();

es.submit(myRunnable);
并再次提交

es.submit(myRunnable);

!!!好的,它工作了,问题是int k。 我必须在“执行的操作”按钮中将其设为0,才能重新启动运行
谢谢大家!!!:D

!!!好的,它可以工作了,问题是int k。 我必须在“执行的操作”按钮中将其设为0,才能重新启动运行
谢谢大家!!!:D

A
Thread
一旦执行,就不应该重新运行,而是创建一个新的
Thread
对象并运行它。我们需要查看代码的相关部分(除非您想让我们开始猜测:)。一个
Thread
一旦执行,就不应该重新运行,而是创建一个新的
线程
对象并运行它。我们希望看到代码的相关部分(除非您希望我们开始猜测:)。您能解释一下它是如何工作的吗?我尝试了一些东西,但似乎不正确。我添加了一个示例。你试过什么?你说“不正确”是什么意思?我想你是指执行者。newSingleThreadExecutor()
,对吧?我试过了,但它不起作用:(我声明了ExecutorService和Runnable Animateur,我在“jbInit()”中初始化了第一个,在按钮操作事件中我试过:1-只放es.submit(jPanel3)2-在这里初始化executor服务并在3-初始化、提交和“Shutdownow()”之后提交。我还从我的runnable类中删除了extends线程。结果总是一样的:我可以在第一天执行,但第二次按钮不起作用,我看不到动画…怎么了(我尝试了一些东西,现在模拟从第二天开始(因为我有一个JOptionPane告诉我),但我仍然看不到任何东西……可能是我的动画师代码中有错误?你能解释一下它是如何工作的吗?我尝试了一些东西,但似乎不正确。我添加了一个示例。你尝试了什么,你的意思是什么“不正确”?我想你是指执行者。newSingleThreadExecutor()
,对吗?