Java:如何从本机安装程序创建工作.exe?
我有一个程序,我希望能够被任何用户轻松安装,我认为创建一个本机安装程序是可行的方法。 我使用了Netbeans 8.0的function(项目属性>启用本机打包,以及打包为)。 我能够创建一个有效的本机安装程序。 安装后,我有以下文件树:
+-- 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时,我在窗口弹出窗口中收到以下错误消息,但没有任何详细信息 :
Failed due to exception from main class
为了确定问题的根源,我使用了基本的标准输出,并通过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):右键单击Libraries> Add jar / folder
- 在main方法中,实例化引用该库的对象。
- 右键单击项目菜单中项目的名称>属性>部署>启用本机打包操作
- 右键单击项目> Package as> EXE installer
- 构建完成后,转到创建安装程序的目录,然后启动安装程序。
- 在安装结束时,转到安装目录,然后启动.exe。 应该发生错误。
知道如何解决这个问题吗?
我刚才遇到了一个与本机打包的JavaFX应用程序类似的问题,我得到了“因主类exception而失败”错误。 我的package.cfg看起来和你的一样。
我做的诊断只是从命令行手动运行jar文件(例如Project.jar),看看堆栈跟踪是什么,例如你的Main类是否在org.project.Project中
java -cp Project.jar org.project.Project
事实certificate,我用来加载包装在jar中的各种文件(例如JavaFX的FXML文件)的URL导致了问题 – 我使用的是相对URL(例如“./blah.ext”或“../” foo.txt“etc),但是一旦我根据文件在jar中的布局方式将URL更改为绝对,它就可以正常工作(例如”/org/project/blah.ext“和”/ org / foo“。文本”)。
同样的问题,使用这些:
- Java SE版本8更新31(版本1.8.0_31-b13)
- NetBeans 8.0.2(补丁1)
- 英特尔酷睿i7(64位)上的Windows 7 Enterprise SP1
- Inno Setup Compiler 5.5.5(u) – Unicode
我还通过重定向printlns跟踪输出,并在第一次调用外部库时爆炸。 我想也许我和matt1有同样的问题所以我修复了所有的相对路径,但没有快乐。 我终于发现安装程序没有使用外部jar文件创建/ app / lib文件夹。 手动将lib文件夹复制到目标安装文件夹后,它工作正常,即使在没有安装JRE的计算机上(我正在处理一个独立的应用程序)。
修复是在build.xml中添加一行:
第二个fileset指令强制从lib文件夹中获取jar依赖项的副本,该文件夹在部署为EXE或MSI时修复了所有内容。
我认为你的主类没有正确设置为打包。 您可以使用exe4J从您的jar文件中创建exe,而不是使用Netbeans。(请确保从项目>属性>运行>主类设置主类
从这里下载exe4J