2013-08-06 3 views
0

java 코드에서 jar 파일 Command.jar을 사용하고 싶습니다. 명령 줄에서 Command.jar을 실행할 때 java -jar Command.jar "Param1"과 같이 잘 작동합니다. 하지만 프로세스 빌더 또는 Runtime.getRuntime()을 사용하여 Java 코드에서 실행하려고하면 exec가 작동하지 않습니다.내 Java 코드에서 jar 호출하기

List <String> command = new ArrayList<String>(); 
command.add("java -jar"); 
command.add("Command.jar"); 
command.add("Param1"); 

ProcessBuilder builder = new ProcessBuilder(command); 
try { 
    Process process = builder.start(); 
} catch (IOException e) { 

} 

그것은 작동하지 않습니다 -

나는이 시도했다. 나도 이것을 시험해 보았다 :

Runtime.getRuntime().exec("java -jar Command.jar Param1"); 

운 없음. 내가 잘못

+3

특히 작동하지 않는 것은 무엇입니까? 오류가 있습니까? – MadcoreTom

+0

프로세스 출력을 얻어 로그에 기록해야합니다. 나는 "java"명령이 보이지 않기 때문에 가장 가능성이 높다고 생각합니다. –

+0

오류 로그를 게시하십시오. –

답변

0

이 잘못된 : 그것은

command.add("java"); 
command.add("-jar"); 

을해야하지만,뿐만 아니라 다른 문제가있을 수 있습니다

command.add("java -jar"); 

. 예를 들어 java은 PATH 환경 변수가 제공하는 검색 경로를 통해 액세스 할 수 없습니다. 또는 Command.jar이 현재 디렉토리에 없을 수도 있습니다.

java 명령으로 표준 출력 및/또는 표준 오류 스트림에 무엇이 기록되어 있는지 확인해야합니다.

+0

이 라인을 processbuilder java -Drootdir = "Argument1"-jar 명령에 전달하는 방법을 알려주십시오.jar "Argument2" –

+0

따옴표 문자가 인수 문자열의 일부가되도록 하시겠습니까? –

+0

따옴표 문자는 인수의 일부가 아닙니다. –

0

하고있는 중이 곳은

어떻게 도움을 우리에게 말해주지 않습니다 작동하지 않습니다 알려주세요. 오류 메시지 또는 원하지 않는 결과를 제공해야합니다. 문제를 디버그하고 범위를 좁히는 데 도움이되도록 System.out.println을 사용하십시오.

개인적인 경험과 다른 문제로 추측 할 수있는 것은 수동으로 실행할 때 명령 프롬프트에서 cd "Directory\With\Path\To\Jar" 명령을 실행했을 가능성이 높다는 것입니다. Runtime.getRuntime().exec에 대해서도 동일한 작업을 수행하거나 프로그램에서 exec이 기본으로 설정된 위치에 jar 파일을 넣어야합니다.

+0

그의 코드가 자동으로 알려 지므로'e.printStackTrace();'에 대한 노트를 추가 할 수 있습니다 예외는 무시한다. – ADTC

0

ProcessBuilder (java.lang.ProcessBuilder)를 사용해 보셨습니까? 구문은 다음과 같다 -

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "absolute path upto jar"); 
Process p = pb.start(); 

다음과 같이 파일로/입력/출력/오류를 redirent 수는

File commands = new File("absolute path to inputs file"); 
File dirOut = new File("absolute path to outputs file"); 
File dirErr = new File("absolute path to error file"); 

dirProcess.redirectInput(commands); 
dirProcess.redirectOutput(dirOut); 
dirProcess.redirectError(dirErr); 

나는 그것을 시도하고 그것이 작동! 오류 또는 예외에 대해 알려주십시오.

+0

자바 1.6에서 작동하지 않는다고 생각하지 않습니다. 1.6에서 redirectInput 메소드가 없습니다. 1.6에 실행할 수있는 다른 솔루션이 있습니다. 또 하나의 항아리로 인수를 전달하고 싶습니다. 그럼 내가 어디로 가야 하죠? 새로운 ProcessBuilder ("java", "-jar", "절대 경로 upto jar")를 전달할 수 없습니다. –

+0

나는 아웃 스트림과 인풋 스트림을 사용했고, 작동 중이다. 덕분에 –

+0

당신 processbuilder에이 라인을 전달하는 방법을 알려주십시오 java -Drootdir = "Argument1"-jar Command.jar "Argument2" –

관련 문제