2013-04-15 2 views
0

저는 플레이어와 무작위로 봇을 이동시키는 매우 간단한 Java 게임을 만들었습니다. 플레이어는 버튼을 눌러지도에 봇을 추가 할 수 있으며, 버튼을 누르면 봇의 새 스레드가 만들어집니다.스레드가 동일한 이름을 갖고 있음에도 불구하고 스레드를 구별합니다.

는 그래서 내가 여러 로봇이 생성되는 버튼을 여러 번을 누르면

Thread newBotThread = new Thread(new Runnable(){ 

      public void run(){ 

, 그들은 모두가 'newBotThread'스레드 이름으로 실행됩니다 ... 이런 식으로 뭔가를 보이는? 플레이어가 봇과 상호 작용할 수있게 해주는 함수를 추가하고 있습니다. 스레드가 모두 동일한 이름을 가지고 있더라도 스레드를 구별하는 방법이 있습니까? 그래서 한 봇을 멈출 수 있었고 다른 봇은 계속 진행할 수 있었습니까?

고마워요!

+0

이 코드는 "봇 추가"버튼의 이벤트 처리기에서 실행됩니까? 그렇다면 한 블록의 봇만 사용해도 해당 블록 외부의 변수에 어떻게 액세스합니까? 게임 클래스에 봇 컬렉션 인 필드가 있다고 생각하면 이벤트 핸들러가 스레드를이 컬렉션에 추가합니다. – The111

+0

각 스레드는 고유 한'Thread.getId()'를 가지고 있습니다 –

답변

0

짧은 답변 : 스레드의 이름을 설정하고 start() 메소드를 호출하기 전에 설정해야하는 Thread # setName (String) 및 생성자 Thread (String) 메서드가 있습니다.

긴 대답 : 당신은 아마 당신의 봇을 제어하기 위해이 이름을 사용해서는 안됩니다. 나는 go(), stop(), continue() 또는 필요한 것과 같은 메소드를 포함하는 Runnable을 구현하는 클래스를 만드는 것이 좋습니다. 그리고 이러한 클래스의 새 인스턴스를 만들 때마다 참조를 어딘가에 유지합니다 (어쩌면 Map 또는 BotManager 또는 무엇이든간에) 또한 실행자와 함께 실행해야합니다. 그냥 내 의견

2

당신은 Collection에 추가 할 수 있습니다 같은 ArrayList 같은 : 당신이 클래스 (들)의 나머지 부분에 accesible의 botThreads 곳을 선언해야 물론

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

, 외부의 그래서 당신의 버튼 이벤트 핸들러.

+0

어떻게 'Thread.getId()'를 인쇄 할 수 없습니까? 그것은 정적 컨텍스트에서 비 정적 변수를 참조 할 수 없다고 말합니다. – hunterge

+0

'Thread.getId()'는 정적 메서드가 아니므로 실제 Thread 객체에서 호출해야합니다. 'botThreads.get (0) .getId()'와 비슷합니다. – Kninnug

관련 문제