2013-06-19 78 views
0

我想從下面的代碼打開pdf文件。從java啓動pdf文件

try { 
     String currentDir = System.getProperty("user.dir"); 
     currentDir = currentDir+"/Report.pdf"; 
     System.out.println("Current dir using System:" +currentDir); 
     if ((new File(currentDir)).exists()) 
      { 
     Process p = Runtime 
     .getRuntime() 
    .exec("rundll32 url.dll,FileProtocolHandler " +currentDir); 
    p.waitFor(); 
    } 
     else 
      {  
     System.out.println("File is not exists"); 
    } 
    System.out.println("Done"); 
} 
    catch (Exception ex) 
     {  
    ex.printStackTrace();  
    } 

print語句給我的文件的正確路徑,即
當前目錄使用 System:/Users/mshariff/NetBeansProjects/javaGUIbuilding/Report.pdf
但節目是給下面的錯誤。

java.io.IOException: Cannot run program "rundll32": error=2, No such file or directory 

我使用Mac OSX & Netbeans

+1

有你嘗試過使用[java.awt.Desktop](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html)?對於[示例](http://docs.oracle.com/javase/tutorial/uiswing/misc/desktop.html) – MadProgrammer

+1

如果您使用MacOS,您如何期待'rundll32'工作,看作是它的Windows命令。 ..? – MadProgrammer

回答

1

你手頭的解決方案只會工作一個窗口(rundll32是Windows命令)

相反,你應該利用Desktop API

例如...

public static void main(String[] args) { 
    try { 
     Desktop desktop = Desktop.getDesktop(); 
     if (desktop.isSupported(Desktop.Action.OPEN)) { 
      desktop.open(new File("Your.pdf")); 
     } else { 
      System.out.println("Open is not supported"); 
     } 
    } catch (IOException exp) { 
     exp.printStackTrace(); 
    } 
} 
+0

我可以用這個打開文件,謝謝!但現在我遇到了一個新問題。當我運行本程序時,文件僅在第一次打開。當我關閉文件,並更新並再次點擊打開。雖然文件已更新,但它不會再次打開。 – CleanX

+0

我想通了,其實我已經聲明String currentDir1 = System.getProperty(「user.dir」);靜態全局。所以每次我點擊按鈕。 report.pdf被添加到字符串中。所以它首先打開。然後在它內部有錯誤的地址。 – CleanX