2012-09-25 3 views
0

저는 비디오 게임과 같은 프로그램을 Java에서 실행하고 Java에서 모든 작업을 출력하려고합니다. 가능한가요? 모든 것을 명확히하기 위해, 나는 그것이하는 일의 관점에서 게임의 결과를보고 싶다. 다른 프로그램 언어로되어 있기 때문에 완전히 이해할 수 없을 수도 있습니다. 여기에있는 누군가는 코드에 대한 게임을 해킹하기 위해 gameshark/gamegenie를 사용하는 것을 기억합니까? 그것은 내가하고 싶은 일종입니다.java에서 프로그램을 실행하면 수행중인 작업을 읽습니다.

지금까지 런타임 및 프로세스 작성기를 사용해 보았지만 아무것도 출력하지 않았습니다. 콘솔에 게임 인쇄 뭔가 자바없이 시작할 때 경우 문제가 버퍼링,

public class ProcessW { 
    public static void main(String[] args) throws IOException { 
     String command = "...my game..."; 

     ProcessBuilder pb = new ProcessBuilder(command); 
     pb.redirectErrorStream(true); 
     Process proc = pb.start(); 

     java.io.InputStream is = proc.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 

     String line; 
     int exit = -1; 

     while ((line = br.readLine()) != null) { 
      // Outputs your process execution 
      System.out.println(line); 
      try { 
       exit = proc.exitValue(); 
       if (exit == 0) { 
        // WinProcess finished 
       } 
      } catch (IllegalThreadStateException t) { 
       // The process has not yet finished. 
       // Should we stop it? 
       //if (processMustStop()) 
        // processMustStop can return true 
        // after time out, for example. 
        proc.destroy(); 
      } 
     } 
    } 
} 
+0

오타 또는 command가 실제로 빈 문자열입니까? 당신의 프로그램은 무엇을 시작할 것으로 예상합니까? – Raffaele

+0

버퍼링 프로세스 출력없이 시도하십시오. –

+0

'output everything'을 정의하십시오. Asm 지시 사항? 메모리가로드됩니까? JVM 명령어? – SJuan76

답변

1

:

다음은 내 코드입니다. Java는 4096 바이트의 출력이 기록 된 후에 만 ​​게임의 출력을 볼 수 있습니다.

이 문제를 방지하는 유일한 방법은 각 행 다음에 stdout.flush() (또는 이와 유사한)을 호출하여 OS가 출력을 Java 프로세스로 보내도록 게임의 코드를 변경하는 것입니다.

관련 문제