2012-10-01 3 views
1

문제가 생겼습니다. Java 응용 프로그램을 만들었습니다. 다른 Java 응용 프로그램 (Jar)을 다운로드하고 appdata에 저장 한 다음 실행해야합니다. 하지만 두 번째 Jar를 실행하는 데 사용하는 Runtime.exec()는 콘솔을 통해 기본 Jar를 실행할 때만 작동합니다.Java : Runtime.exec()은 콘솔을 통해서만 작동합니다.

String command = "java -jar -Xms" + comboBox.getSelectedItem() + " " 
    + Util.getWorkingDirectory() + File.separator + "zlauncher" 
    + File.separator + "minecraftStarter.jar " + txtUsername.getText() + " " 
    + passwordField.getText() + " " + Util.toString(chckbxRemember.isSelected()); 
Runtime rt = Runtime.getRuntime(); 
rt.exec(command); 

이 콘솔을 통해 시작하면 작동하지만 독립 실행 형 Jar로 실행하면 작동하지 않습니다.

콘솔이 없어도 두 번째 Jar를 시작하는 방법을 시각화 할 수있는 팁을 줄 수 있습니까?

편집 : ProcessBuilder에서도 동일한 결과를 얻었습니다. (콘솔의 작품,하지만 독립 실행 형)

+0

, '독립 항아리로 시작 ? ' – bmargulies

+0

Windows에서 Java로 Jar를 직접 시작할 수 있습니다.이 경우에는 콘솔이 필요 없습니다. (GUI 기반) – IZED

+0

자바 대신 javaw 실행기를 사용해 보셨습니까? (예 : String command = "javaw -jar -Xms"[...]) – besen

답변

3

몇 가지 팁 : 당신이 다른 ProcessBuilder를 사용하면 포기하고 런타임을 사용한다는 것을 의미하지 않는다 사용하여 작업 할 수 없었다

해서. exec(). Runtime.exec()는 non-trival에 사용하기가 정말로 어렵고 불가능한 곳입니다. 그래서 ProcessBuilder를 사용하십시오.

String을 취하는 것이 아니라 목록을 취하는 ProcessBuilder 생성자를 사용하십시오. 문자열을 취하는 함수는 Runtime.exec()과 똑같은 문제가 있습니다.

가능하면 Windows 용 배치 파일이나 Linux 용 쉘 스크립트를 사용하여 가능한 한 많은 작업을 수행하십시오. 경로 설정 등). 커맨드 라인에서 디버깅했으면 ProcessBuilder에서 사용하는 것이 훨씬 쉽습니다.

환경의 쉘을 호출 (예 : cmd를/e 또는/빈/bash는, 또는 무엇 - 당신 - 있고, 쉘이 배치 파일을 실행합니다.

는의 출력 스트림을 읽을 것을 잊지 마세요 과정을 양산 그렇게하지 않으면, 자식 프로세스가 매우 높다 잠글 것

0

당신은 문자열 배열로 명령을 넣어 shuld :.. 당신이 뜻하는 일

Runtime rt = Runtime.getRuntime(); 
rt.exec(new String[] { "java", "-jar", "-Xms", comboBox.getSelectedItem(), Util.getWorkingDirectory() + File.separator + "zlauncher" + File.separator + ""minecraftStarter.jar", txtUsername.getText(), passwordField.getText(), Util.toString(chckbxRemember.isSelected()) }); 
관련 문제