2013-04-15 48 views
0

我创建了一个非常简单的Java游戏,其中包含一名玩家和随机移动的漫游器。玩家可以通过按下按钮来将漫游器添加到地图上,这会为机器人创建一个新线程。区分线程,即使它们具有相同的名称

因此,它看起来像这样...

Thread newBotThread = new Thread(new Runnable(){ 

      public void run(){ 

如果我按几次按钮被创建,几个机器人,他们在所有的线程名“newBotThread”下运行?我添加了允许玩家与机器人互动的功能,是否有区分线程的方法,即使它们都具有相同的名称?所以我可以阻止一个机器人,而其他人仍然继续?

非常感谢!

+0

此代码是否在“添加机器人”按钮的事件处理程序内运行?如果是这样,即使只有一个机器人,你如何访问该块之外的变量?我会考虑在你的游戏类中有一个属于bot的集合,并且事件处理程序将线程添加到这个集合中。 – The111

+0

每个线程都有一个唯一的'Thread.getId()' –

回答

0

简短回答:有一个方法Thread#setName(String)和一个构造函数Thread(String),它们设置线程的名称并且必须在调用start()方法之前设置。

长答案:你很可能不应该用这个名字来控制你的机器人。我建议创建一个实现Runnable的类,其中包含诸如go(),stop(),continue()或任何您需要的方法,并且每当创建这些类的新实例时,都将引用保存在某处(可能是Map或BotManager或者其他),你也可能应该用Executor来执行它们。只是我的意见

2

你可以将它们添加到Collection,如ArrayList

ArrayList<Thread> botThreads = new ArrayList<Thread>(); 
... 
botThreads.add(new Thread(new Runnable(){ 
... 

当然,你应该申报botThreads的地方在那里它是入店到您的类(ES)的休息,所以外面的你按钮的事件处理程序。

+0

我怎么无法打印'Thread.getId()'?它说我不能从静态上下文中引用一个非静态变量 – hunterge

+0

'Thread.getId()'不是一个静态方法,你需要在一个实际的'Thread'对象上调用它。像'botThreads.get(0).getId()' – Kninnug

相关问题