2013-06-03 3 views
0

Linux Ubuntu OS에서 일부 설치된 도구를 실행할 Java 프로그램을 작성 중이므로 동일한 프로세스에서 두 개의 연속 명령을 실행해야하지만 처음에는 완전히 실행 한 다음 두 번째를 호출하십시오. "\ n"다음 코드와 같이 두 명령을 구분하려고 시도했지만 작동하지 않았습니다.Java 응용 프로그램에서 Enter 키를 누르는 방법

public static void main (String args[]) 
{ 
    List<String> command = new ArrayList<String>(); 
    command.add("spin"); 
    command.add("-p"); 
    command.add("-u100"); 
    command.add("D:\\promela\\peterson.pml"); 
    command.add("\n"); 
    command.add("cc -o pan pan.c"); 
    command.add("./pan"); 


    String[] commandArray = command.toArray(new String[command.size()]); 
    ProcessBuilder pb = new ProcessBuilder(commandArray); 
    Process process; 
    try { 

      process = pb.start(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      BufferedReader errReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
      String errline, outline; 


      for(String s : command) 
      { 
      System.out.println(s + " "); 
      } 

      while ((outline = br.readLine()) != null) 
      { 
      System.out.println(outline); 
      } 

      while ((errline = errReader.readLine()) != null) 
      { 
       System.err.println(errline); 
      } 


    } catch (IOException e) 
    { 
     e.printStackTrace(); 

    } 
} 
+0

@MarcoForberg 아니, Java에서 Ctrl + Enter를 어떻게 전달할 수 있습니까? – Sami

+0

아 잊어 버려. 틀 렸습니다. 콘솔에서 읽을 때 입력을 전달해야한다고 생각했습니다. –

답변

0

나는 그것을 할 수 있다고 생각하지 않습니다 :

  • 어느 당신은 할 수 있습니다 "유형"명령 또는
  • 당신이를 실행하는 터미널/콘솔/bash는 프로세스를 실행 이러한 명령을 구문 분석 할 수없는 특정 실행 파일은 작동하지 않습니다.

2 개의 프로세스를 시작하는 것이 더 쉽지 않을까요?

사이드 노트 : out 스트림과 err 스트림을 차례 차례로 읽지 말고 별도의 스레드로 병렬로 읽거나 더 쉽게 ProcessBuilder#redirectErrorStream을 사용하여 하나의 스트림 (out) 만 읽으면됩니다.

+0

이 코드는 서버에서 실행되므로 입력 할 수 없습니다. 그것은 자동화되어야합니다. 레. 2 개의 프로세스를 시작하면, 두 개의 명령은 서로를 따른다; 첫 번째 코드는 두 번째 명령에 사용할 수있는 C 코드를 생성합니다. 이와 비슷한 작업을 수행 할 수있는 다른 방법이 있습니까? 사이드 노트 주셔서 감사. – Sami

+1

@Sam "type"은 java 코드에서 프로세스의 출력 스트림에 키를 보내는 것을 의미합니다. 프로세스에서 C 코드를 생성하지 못하게하고 (waitFor()를 사용하여) 프로세스가 완료 될 때까지 기다린 다음 두 번째 프로세스를 시작하여 두 번째 명령을 실행하십시오. – assylias

+1

감사합니다. 내가 잘못 이해하지 못한다면, 내가 시도한 것은 대답의 첫 번째 옵션입니다. 그것은 다른 프로세스를 시작하는 일을할지 모르지만, 나는 다른 프로세스를 시작하는 것과 비슷할 것입니다. 그리고 그것은 내가'spin -p -u10 xyz.pml'와 같은 각각의 하나를 인식 할 수 있도록 명령을 표현하는 방식을 재구성하고 새로운 명령으로 각각 여러 번 프로세스를 시작합니다 – Sami

관련 문제