2012-06-18 5 views
0

pdf에서 텍스트를 추출하는 자바 스윙 응용 프로그램이 있습니다. 내가 명령 프롬프트 (java -jar xyz.jar) 또는 더블 클릭하여 실행하고 항아리를 실행하지만 자바 코드자바 코드를 사용하여 jar를 실행하는 중 오류가 발생했습니다.

Process asm = Runtime.getRuntime().exec("java -jar xyz.jar"); 
asm.waitFor(); 

를 사용하거나 프로세스 빌더를 사용하여 실행하는 경우가 걸리면 때 잘 작동합니다. 내 응용 프로그램의 예외 때문입니까? 나는 잘 모르겠다.

+1

프로그램의 출력 스트림을 소비하는 다른 스레드가 필요할 수도 있습니다. 그렇지 않으면이 코드는 데드 록합니다. – Thilo

+0

어떻게 할 수 있습니까? – Raj

+1

http://www.javaworld.com/jw-12-2000/jw-1229-traps.html – Thilo

답변

2

아마도 적절한 디렉토리에 있지 않습니다.

ProcessBuilder의 directory() 메서드를 사용하면 외부 프로세스가 올바른 위치에서 실행되어 jar을 찾을 수 있습니다.

ProcessBuilder processBuilder = new ProcessBuilder("java -jar xyz.jar"); 
processBuilder.redirectErrorStream(true); 
processBuilder.directory( complete this); 
Process process = processBuilder.start(); 
String output = readOutput(process); 
try { 
    if (process.waitFor() != 0) { 
     throw new IOException("command exited in error: " + process.exitValue() + "\n" + output); 
    } 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

이 문제가 해결되지 않으면 어떻게되는지 (오류 포함) 출력 스트림을 인쇄 할 수 있습니다.

+0

실제로 jar가 실행되고 있지만 막히고 있습니다. middle – Raj

+0

콘솔에서 상태/예외를 인쇄하고 processbuilder 출력을 사용하여 콘솔을 읽을 수 있다고 가정합니다. 그게 뭘 보여? –

관련 문제