我正在尝试使用Desktop
类在Windows上打开本地HTML文件。但它只适用于某些特定的JRE,而不适用于其他一些JRE。
这是我的代码:
try {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
if (desktop.isSupported(Desktop.Action.OPEN)) {
desktop.open(new File("test.html"));
} else {
throw new Exception("OPEN action not supported");
}
} else {
throw new Exception("Desktop not supported");
}
} catch (Exception e) {
e.printStackTrace();
}
当它不起作用时,不会抛出异常,也不会在STDERR中打印文本。
适用于:
不使用:
所有测试均在同一个Win7 64位盒上进行。
编辑:尝试打开“txt”或“pdf”文件时出现同样的问题
谢谢。
答案 0 :(得分:5)
这个问题已经存在了一段时间,并且已经记录了一些解决方案at this blog.
我已经使用了下面的代码,并且无论JRE如何,它在我使用过的每台Windows机器上都是可靠的。对不起,我不知道我测试过的所有JRE。
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + path);
答案 1 :(得分:1)
正如“Stijn de Witt”在“hasntchecked”的回答中所说的那样,基于Runtime.getRuntime()
的解决方案不适用于UNC路径,以及包含连续空格的路径。以下解决方案也适用于这些特殊路径:
new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", path).start();