[英]How can I detect if file not found for execution by ProcessBuilder in Java?
我有這部分代碼,應該在Windows上啟動msg.exe子進程:
ProcessBuilder pb = new ProcessBuilder("msg.exe");
try {
proc = pb.start();
} catch (IOException ex) {
jLabel4.setText("Cannot launch message box process");
return;
}
現在,我嘗試刪除/重命名msg.exe,並且沒有引發異常:catch子句中的兩行都沒有執行。 如何檢測是否未找到要由流程構建器執行的文件?
如果我嘗試捕獲FileNotFoundException,它說這已被捕獲(可能是IOException的一部分)。 如果我嘗試僅捕獲FileNotFoundException,則需要捕獲IOException並帶有警告。
我的鏡頭在黑暗中:
您嘗試從Java代碼執行的Java應用程序目錄中有一個名為“ msg.exe”的可執行文件。 重命名或刪除文件時,期望new ProcessBuilder("msg.exe").start()
拋出IOException
。
這不會發生,因為如果目錄中沒有名為“ msg.exe”的文件,它將在您的%PATH%
,最后在C:\\Windows\\System32\\
找到它,這可能是您所需要的沒打算。
通過明確聲明您要執行的文件必須存在於當前目錄中,可以解決此難題: new ProcessBuilder("./msg.exe")
可以從同一實例重復調用start()方法以創建具有相同或相關屬性的新子流程。每個流程構建器都管理這些流程屬性
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("msg.exe");
// pb.directory(new File("c:\\xyzwsdemo"));
try {
Process proc = pb.start();
} catch (IOException ex) {
System.out.println("Cannot launch message box process");
return;
}
}
執行以上類:無錯誤
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("msfg.exe");
// pb.directory(new File("c:\\xyzwsdemo"));
try {
Process proc = pb.start();
} catch (IOException ex) {
System.out.println("Cannot launch message box process");
return;
}
}
將msg.exe重命名為msfg.exe-捕獲到異常,刪除代碼后相同
您是否嘗試過在主類中執行並再次檢查?
您的代碼將不會拋出FileNotFoundException
,而將拋出IOException
請參閱文檔
以下是我得到的異常,因為我在Linux上,所以無需將msg.exe
的名稱更改為其他名稱來生成異常
java.io.IOException: Cannot run program "msg.exe": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at Neeraj.main(Neeraj.java:8)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 1 more
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.