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