2012-08-11 8 views
0

나는 몇 가지 인자가 주어진 게임 서버를 호스팅하는 IRC 봇을 가지고있다. 문제는 일단 서버를 호스팅하면 IRC 수신을 중단한다는 것입니다 (현실적으로 한 번에 하나의 서버 만 호스팅 할 수 있음). 이것은 내가 원하는 것이 아닙니다.자바 쓰레드가 시작되지 않는다

스레딩이 내 문제에 대한 해답이라고 가정했으나 제대로 작동하지 않는 것으로 보입니다. 그것은 실제로 다른 스레드에서 시작되지 않는 것 같습니다?

// Everything is okay, run the server. 
Runnable r = new Server(this, channel); 
Thread thread = new Thread(r); 
thread.start(); 

을 그리고 여기에 (아마도) 스레딩 제어하는 ​​서버 클래스입니다 :

public class Server extends PircBot implements Runnable { 

public void run() { 

} 

public Server (bot BotRun, String channel) { 
    String names[] = org.bestever.bebot.bot.hostbuilder.split(" "); 
    ProcessBuilder pb = new ProcessBuilder(names); 
    pb.redirectErrorStream(true); 
    try { 
     Process proc = pb.start(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     String strLine = null; 
     while((strLine = br.readLine()) != null) { 
      // Returns UDP Initialized if the server was successfully started 
      if (strLine.equalsIgnoreCase("UDP Initialized.")) { 
       BotRun.sendMessage(channel, "Server started successfully."); 
      } 
      // Returns Bad Hex Number if there is a problem with the WAD file 
      else if (strLine.startsWith("Bad hex number")) { 
       BotRun.sendMessage(channel, "Error starting server: "+strLine); 
      } 
      System.out.println(strLine); 
     } 
     Thread.currentThread().interrupt(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

내가 실제로 가지고 여기

가 시작되고 스레딩을 통해 메소드를 실행 내 주요 클래스 스레드에서 시작 했습니까? 어떤 도움을 주셔서 감사합니다!

답변

3

나는 두렵다.

서버 클래스는 더 같이해야한다 :

public class Server extends PircBot implements Runnable { 

    private bot BotRun; 
    private String channel; 
    public void run() { 
     String names[] = org.bestever.bebot.bot.hostbuilder.split(" "); 
     ProcessBuilder pb = new ProcessBuilder(names); 
     pb.redirectErrorStream(true); 
     try { 
      Process proc = pb.start(); 
      Reader reader = new InputStreamReader(proc.getInputStream()); 
      BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
      String strLine = null; 
      while((strLine = br.readLine()) != null) { 
       // Returns UDP Initialized if the server was successfully started 
       if (strLine.equalsIgnoreCase("UDP Initialized.")) { 
        BotRun.sendMessage(channel, "Server started successfully."); 
       } 
       // Returns Bad Hex Number if there is a problem with the WAD file 
       else if (strLine.startsWith("Bad hex number")) { 
        BotRun.sendMessage(channel, "Error starting server: "+strLine); 
       } 
       System.out.println(strLine); 
      } 
      reader.close(); 
      Thread.currentThread().interrupt(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Server (bot BotRun, String channel) { 
     this.BotRun = BotRun; 
     this.channel = channel; 
    } 
} 
2

귀하의 run() 방법이 비어; 시작되고 아무것도하지 않고 끝납니다.

+0

멍청한 질문에 사과드립니다.이 내용을 더 자세히 확인해야합니다. 답변 해주셔서 감사합니다! – Ivan

관련 문제