2011-06-02 77 views
1

我創建了一個生成excel電子表格(.xls)的程序,然後詢問用戶是否想立即打開它(如果是,它使用java.awt.Desktops打開()命令來這樣做)。這在Windows XP中工作正常,但是當我嘗試使用Windows 7時,它不起作用。下面是我的代碼示例...在java中打開文件時出現錯誤(windows 7)

Desktop myDesk = null; 

//if printed to file successfully and java.awt.Desktop is supported 
if (printed && Desktop.isDesktopSupported()) 
{ 
    myDesk = Desktop.getDesktop(); 

    if (myDesk.isSupported(Desktop.Action.OPEN)) 
    { 
     //ask to open file 
     int openFile = JOptionPane.showConfirmDialog(null, "File successfully 
          created.\nWould you like the excel file to open?", 
          "open file?", JOptionPane.YES_NO_OPTION); 

     //try to open file 
     if (openFile == JOptionPane.YES_OPTION) 
     { 
      try { myDesk.open(myFile); } 
      catch (IOException e){ JOptionPane.showMessageDialog(null, "Problem 
            opening file automatically, please open it 
            yourself.", "Error", JOptionPane.ERROR_MESSAGE); } 
     } 
    } 
} 

在此成功打印到文件的Windows 7,它顯示了中openFile對話,則顯示錯誤的對話。這不應該發生,因爲爲了獲得openFile對話,Desktop和Desktop.open()都應該被支持。這可能與試圖打開「.xls」文件而不是「.xlsx」文件有關,但是Excel文件仍然應該被設置爲默認文件類型...

因此,有關此原因的任何想法正在發生?無論是如何解決這個問題,還是有另一種方法可以打開一個更好地普遍適用的文件?

+0

[Javadoc](http://download.oracle.com/javase/6/docs/api/java/awt/Desktop.html#open(java.io.File)),爲這些人節省了一點時間試圖回答:「IOException - 如果指定的文件沒有關聯的應用程序或關聯的應用程序無法啓動」。 – 2011-06-02 19:33:58

+0

@ michael-myers但是excel被設置爲關聯的應用程序(如果我雙擊該文件,它會在excel中打開而沒有問題),那麼爲什麼excel無法啓動? – scaevity 2011-06-02 19:56:00

回答

1

這聽起來像是一個標準的Vista/7 UAC問題。您可能想嘗試在控制面板 - >用戶帳戶 - >打開或關閉用戶帳戶控制中打開用戶帳戶控制(UAC)。

+0

你的意思是我應該讓每個使用我的程序的用戶在運行該程序之前手動更改他們的計算機設置?如果是這樣,那看起來不是一個非常簡單的解決方案。 – scaevity 2011-06-02 19:45:41

+0

那麼,Windows Vista/7不希望應用程序本質上打開其他應用程序。您是否曾嘗試在Windows 7中以管理員身份運行您的應用程序(右鍵單擊,以管理員身份運行)?更重要的是,爲什麼你真的需要一個應用程序來爲用戶打開Excel? – Joseph 2011-06-02 20:14:18