在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中提到的文件。
答案 0 :(得分:1)
用于的Javadoc public:布尔isSupported(Desktop.Action操作)
即使平台支持某个动作,文件或URI可能也没有该动作的注册应用程序。例如,大多数平台都支持Desktop.Action.OPEN操作。但是对于特定文件,可能没有注册要打开该文件的应用程序。在这种情况下,isSupported(Action)可能返回true,但是相应的action方法将抛出IOException。
答案 1 :(得分:0)
desktop.isSupported(Desktop.Action.OPEN)
告诉您平台支持打开文件,但是可能没有注册的应用程序可以打开特定文件,或者注册的应用程序可能无法打开文件