【发布时间】:2017-07-26 15:53:46
【问题描述】:
我有一些用于打开文件的 java 代码:
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + output.getAbsolutePath());
当我从 Eclipse 执行它时它工作得很好,但是,当我将项目导出到可运行的 JAR 时,该功能停止工作。我尝试了各种不同的选项来打开文件(Desktop.open、ProcessBuilder 等),结果都相同(Eclipse OK,runnable JAR not)。
这个确切的代码以前在我过去(1.5 年前)导出时有效。我相信那是在 Java 1.6 上,现在我们在 Java 1.7 上。不确定这是否是原因,我没有选择使用以前版本的 Java 进行编译。有什么想法吗?
【问题讨论】:
-
如果可能的话,你能发布你得到的异常吗?
-
你是在同一台机器上运行它吗?
-
我会完全避免使用 dll:Java 可以在任何地方运行,这样您就必须绑定到 MS Windows 甚至可能是某个版本才能真正看到它工作。
-
编辑您的问题并显示为
output赋值的代码。如果您调用 Class.getResource 或 ClassLoader.getResource 并在返回的 URL 上调用 getFile() ,它将永远无法工作,因为 getFile() 不会将 URL 转换为文件,而且 .jar 文件是 zip 存档它的条目不是实际的文件,只是压缩字节的子序列。