我有一个程序,我希望任何用户都能轻松安装,我认为创建 native 安装程序是可行的方法。我使用了 Netbeans 8.0 的功能(项目属性 > 启用 native 打包和打包为)。我能够创建一个有效的 native 安装程序。安装后,我有以下文件树:
+-- Project
\+-- app
\+--lib (containing all the jars used by the project)
\---Project.jar
\---package.cfg
\+--runtime
\+--jre (contains the current jre)
\---Project.exe
从 Project.jar 运行程序。但是,当我尝试启动 Project.exe 时,我在弹出窗口中收到以下错误消息,其中没有详细信息:
由于主类异常而失败
为了确定问题的根源,我使用了基本的标准输出并将它们重定向到一个文件中,这要归功于 Windows 命令提示符。在第一次调用外部库之前,我得到了输出。所以看起来库链接没有完成。但是,这是我的 package.cfg
文件的内容:
app.mainjar=Project.jar
app.mainclass=project/Main
app.classpath=lib/firstlibrary.jar lib/secondlibrary.jar
类路径已指定但似乎无法识别。我已尝试反转斜杠 (\) 并更改 、
或 的空格;
无济于事。
有一种重现错误的简单方法(Netbeans 8.0 和 JDK 1.8u11):
- 在 Netbeans 中创建一个新的 Java 项目
- 链接任何外部库 (.jar):右键单击库 > 添加 jar/文件夹
- 在 main 方法中,实例化一个引用该库的对象。
- 右键单击项目名称 > 属性 > 部署 > 在项目菜单中启用 native 打包操作
- 右键单击您的项目 > 打包为 > EXE 安装程序
- 构建后,转到创建安装程序的目录,然后启动安装程序。
- 安装结束时,转到安装目录,然后启动 .exe。错误应该发生。
知道如何解决这个问题吗?
最佳答案
我刚刚遇到了一个与 native 打包的 JavaFX 应用程序类似的问题,我收到了“由于主类异常而失败”错误。我的 package.cfg 看起来和你的一样。
我为诊断它所做的只是从命令行手动运行 jar 文件(例如 Project.jar)并查看堆栈跟踪是什么,例如如果您的主类在 org.project.Project 中
java -cp Project.jar org.project.Project
对我来说,我一直用来加载打包在 jar 中的各种文件(例如 JavaFX 的 FXML 文件)的 URL 导致了问题 - 我使用的是相对 URL(例如“./blah.ext”或“../foo.txt”等),但是一旦我根据文件在 jar 中的布局方式将 URL 更改为绝对 URL,它就可以正常工作(例如“/org/project/blah.ext”和“/org/foo.txt").
关于Java:如何从 native 安装程序创建可运行的 .exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311598/