Desktop.getDesktop()。isSupported(Desktop.Action.OPEN)返回true,但是Desktop#open(java.io.File)引发“ IOException:无法显示URI”

时间:2018-08-15 11:03:35

标签: java desktop ioexception gnome-3

在Java中,我尝试使用Desktop.getDesktop()。open(File file)打开文件,但是尽管Desktop.getDesktop()。isSupported(Desktop.Action.OPEN)表示支持该操作,但它引发IOException。 我正在使用Gnome版本:版本:3.22.3-3。

代码段:

    Desktop desktop = Desktop.getDesktop();
    if (desktop.isSupported(Desktop.Action.OPEN))
        desktop.open(file);

有人知道为什么

  

desktop.isSupported(Desktop.Action.OPEN)

返回真吗? 我知道我可以使用“ xdg-open”打开文件,但我想了解这里发生了什么。

谢谢!

更新:堆栈跟踪:

Caused by: java.io.IOException: Failed to show URI:file:/home/TEST_FILES/blabla.xls
at sun.awt.X11.XDesktopPeer.launch(XDesktopPeer.java:121)
at sun.awt.X11.XDesktopPeer.open(XDesktopPeer.java:84)
at java.awt.Desktop.open(Desktop.java:272)
... 55 more

更新#2: xdg-open可以正常工作,可以在LibreOffice Calc中打开stacktrace中提到的文件。

2 个答案:

答案 0 :(得分:1)

用于的Javadoc public:布尔isSupported(Desktop.Action操作)

  
    

即使平台支持某个动作,文件或URI可能也没有该动作的注册应用程序。例如,大多数平台都支持Desktop.Action.OPEN操作。但是对于特定文件,可能没有注册要打开该文件的应用程序。在这种情况下,isSupported(Action)可能返回true,但是相应的action方法将抛出IOException。

  

答案 1 :(得分:0)

desktop.isSupported(Desktop.Action.OPEN)告诉您平台支持打开文件,但是可能没有注册的应用程序可以打开特定文件,或者注册的应用程序可能无法打开文件