2017-11-26 13 views
-1

내가 원하는 것은 응용 프로그램이 시작될 때 새로운 cmd를 열고 다른 순간에 다른 명령을 쓰는 것입니다. 예 : 응용 프로그램을 시작하고 볼 수 없도록 숨겨진 새 cmd를 실행 한 다음 "cd .."를 씁니다. 응용 프로그램 대기 시간이 10 초 (예 :)이고 "cd"라고 씁니다. . "또 다른 시간에 마침내"dir "을 쓰고 'dir'명령의 결과를 인쇄합니다. 내가 할이 코드를 사용하는 tryed했습니다어떻게 숨겨진 cmd를 자바에서 열고 명령을 쓸 수 있습니까?

public static void main(String[] args) throws IOException{ 
    Runtime rt = Runtime.getRuntime(); 
    Process process = rt.exec("cmd /c cd .. "); 
    process = rt.exec("cmd /c cd .. "); 

    process = rt.exec("cmd /c dir"); 
    BufferedReader commReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    String line = ""; 

    while((line = commReader.readLine()) != null){ 

     System.out.println(line); 
    } 

} 

그하지만 난 그것을 다른 CMDS에 명령을 실행하기 때문에 작동하지 않습니다 본 적이있다. 내 끔찍한 영어에 대해 유감스럽게 생각하고 그 문제를 해결하는 방법을 아는 사람이 있습니까?

답변

0

process 변수를 덮어 쓰고 있으므로 물론 cmd의 여러 인스턴스를 실행할 것입니다.

단일 프로세스를 열고 서브 프로세스의 일반 입력에 연결된 OutputStream에 명령을 쓰십시오.

public static void main(String[] args) throws IOException { 
     ProcessBuilder builder = new ProcessBuilder("cmd"); 
     Process process = builder.start(); 

     OutputStream stdin = process.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 

     writer.write("cd ..\n"); 
     writer.write("dir\n"); 
     writer.flush(); 
     writer.close(); 

     BufferedReader commReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String line = ""; 

     while((line = commReader.readLine()) != null){ 

      System.out.println(line); 
     } 
    }