ProcessBuilder
을 사용하는 경우 기본적으로 파일을 여는 데 필요한 기본 프로그램 경로를 알 필요가 없습니다. 다음과 같이 (Xdg-open 참조) 리눅스에서 윈도우에 cmd.exe
및 xdg-open
를 통해 운영 체제에이 작업을 위임 할 수
public static void main(String[] args) {
String filePath = args[0];
String operatingSystem = System.getProperty("os.name");
try{
if(operatingSystem.toLowerCase().contains("windows")){
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c",filePath);
Process p = pb.start();
} else if (operatingSystem.toLowerCase().contains("linux")){
ProcessBuilder pb = new ProcessBuilder("xdg-open",filePath);
Process p = pb.start();
} else {
throw new UnsupportedOperationException(String.format("Not supported for %1$1s", operatingSystem));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
참고 : 그냥 예이기 때문에이 ProcessBuilder#redirectError
방법을 사용하지 않는.
면책 조항 : 나는 내 의견에이 문제에 대해 추한/제한된 해결 방법이라고 말했지만 작동합니다.
전 프로가 아니지만, 데스크톱을 사용하여 새로운 프로세스를 시작하는 것은 고유 한 문제 일 수 있다고 생각합니다. –
실제로'ProcessBuilder'를 사용하면 실행 파일의 경로가 필요 없습니다. Windows에서 작업하는 경우'new ProcessBuilder ("cmd.exe", "/ c", filepath) .start()'를 사용하면 cmd.exe가 기본 프로그램으로 파일을 엽니 다. Linux에서는 잘 모르겠지만,'new ProcessBuilder (filePath) .start()'만 사용하면 (지금 당장은 테스트 할 수 없다) 작동한다고 생각합니다. – dic19
@ dic19 두번째 제안은'IOException' (permission denied)을 던집니다. 파일은 실행 가능하지 않습니다. 반드시 재부팅하고 싶지는 않기 때문에 Windows 솔루션에 대한 귀하의 말씀을 받아야 할 것입니다. 그것이 작동하더라도, 그것은 다른 플랫폼의 사람들을 돕지 않을 것입니다. – mattbdean