2016-07-31 1 views
0
String[] command = { "cmd.exe", "/C", "Start", "skype" }; 
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(command); 

안녕하세요, 자바에서 skype를 시작하려고합니다! 그리고 난이 문제가 있습니다 : 위의 코드를 사용하고 있습니다. 이클립스에서 완벽하게 작동하지만 runnable jar로 컴파일 할 때 전체 자바가 충돌 할 때까지 새로운 자바 프로세스가 시작되는 무한 루프에 걸릴 것입니다!자바 시작시 런타임 스카 이프

그리고 코드의이 부분에 문제가 있습니다. (내가 모든 것을 잘 작동하지만 Skype가 시작되지 않았다고 해설 할 때)

어디에서 문제가 될 수 있습니까?

편집 *

나는 프로그램의 작은 예를했다 :

Main 클래스 :

package Client; 

public class DemoMain { 


    public static void main(String[] args) { 
     new Demo(); 
    } 

} 

Process 클래스 :

package Client; 

import java.io.IOException; 

public class Demo { 


    public Demo(){ 
     try { 
      Runtime.getRuntime().exec(new String[]{ "cmd.exe", "/C", "Start", "skype" }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

결과 : Task Manager view

일식 컴파일러에서 잘 작동합니다! 프로그램이 Runnable jar에서 시작될 때 문제가 발생합니다.

+0

이 코드는 정확히 한 번 명령을 실행합니다. 논리적 인 설명은이 코드를 둘러싼 ** something **이 반복된다는 것입니다. 정말로 오류를주고 여기에 완벽한 코드를 게시하는 "최소한의 실행 가능한"예제를 만들고 싶습니다. 우리는 올바른 코드를 보면서 당신 편이 무엇인지를 알 수 없습니다! 도움 센터를 참조하십시오. 우리가 당신에게 유용한 답을 줄 수있는 기회를 가질 수 있도록 어떻게 질문해야하는지 이해하십시오. – GhostCat

답변

0

먼저 배치 파일을 정의한 다음 배치 파일을 호출하십시오. 메서드를 정의하고 생성자 메서드를 사용하지 마십시오.

public static String os_exec(String[] cmds) 
    { 
     int ret = 0, i = 0; 
     StringBuffer sb = new StringBuffer(); 
     Process process = null; 
     String line = null; 
     BufferedReader bufferedReader = null; 
     try 
     { 
      ProcessBuilder pb = new ProcessBuilder(cmds); 
      pb.redirectErrorStream(true); 
      process = pb.start(); 
      pb.redirectErrorStream(true); 
      bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       i += 1; 
       sb.append(line); 
       if(i > 1) 
       { 
        sb.append("\r\n"); 
       } 
      } 
      ret = process.waitFor(); 
     } 
     catch (Exception e) 
     { 
      StringBuffer err = new StringBuffer(); 
      for(String commond : cmds) 
      { 
       err.append(commond); 
       err.append(' '); 
      } 
      sb.append(e.getMessage()); 
     } 
     finally 
     { 
      if(bufferedReader != null) 
      { 
       try 
       { 
        bufferedReader.close(); 
        process.destroy(); 
       } 
       catch (Exception e) 
       { 
        sb.append(e.getMessage()); 
       } 
      } 
     } 
     return sb.toString(); 
    } 

start.bat

start C:\skype.exe 

호출의 os_exec();

String[] command = { "cmd.exe", "start.bat" }; 
os_exec(command); 
+0

.jar에 저장된 배치 파일을 실행할 수 있습니까? (자원에서) –

+1

로그를 추가하고 예외를 인쇄해야합니다 –

+0

내 경우에는 runnable jar 파일 안에 박쥐 파일이 있어야합니다 거기서 양식을 실행할 수 있습니까? –

관련 문제