原則上,如果您使用ProcessBuilder
,則無需知道默認程序打開文件的路徑。您可以通過cmd.exe
在Windows和xdg-open
在Linux上這個任務交給操作系統(見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上工作,你可以使用新的ProcessBuilder(「cmd.exe」,「/ c」,filepath).start(),然後'cmd.exe'將用默認程序打開文件。我不確定在Linux上,但我認爲如果你只使用'新的ProcessBuilder(filePath).start()'它會工作(我現在無法測試它)。 – dic19
@ dic19第二個建議會拋出一個'IOException'(權限被拒絕)。這些文件不可執行。我將不得不接受Windows的解決方案,因爲我不一定要重新啓動。即使它確實有效,它也不會幫助其他平臺上的用戶。 – mattbdean