2011-06-02 64 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