2015-02-06 55 views
1

我有這部分代碼,應該在Windows啓動msg.exe子:如何檢測未在Java中由ProcessBuilder執行的文件?

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。

+0

顯示我們pb'的'創作:

這種困境可以通過明確說明該文件你嘗試執行必須在當前目錄中得到解決。 – xehpuk 2015-02-06 16:34:53

+0

應該已經打印;向我們展示創建pb – 2015-02-06 16:52:13

+0

您是否在談論'C:\ Windows \ System32 \ msg.exe'?你是如何重命名或刪除它的?還是你在談論另一個名爲「msg.exe」的可執行文件? – xehpuk 2015-02-06 17:12:12

回答

1

我瞎猜:

您在您的Java應用程序的目錄中有一個名爲「msg.exe」的可執行文件,該程序試圖從您的Java代碼執行。重命名或刪除文件時,您預計new ProcessBuilder("msg.exe").start()會拋出IOException

這種情況不會發生,因爲如果目錄中沒有名爲「msg.exe」的文件,那麼它將在您的%PATH%中搜索它,最後在C:\Windows\System32\中找到它,這可能是您不想要的。 new ProcessBuilder("./msg.exe")

0

()方法可以重複地從相同的實例被調用以創建具有相同或相關的attributes.Each進程生成新的子進程的開始管理這些進程屬性

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 -Exception抓,同在課堂上再次檢查?

0

您的代碼不會拋出FileNotFoundException,它會拋出IOException

Documentation

下面是我得到的例外,因爲我是在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 
相關問題