java - 使用 Inno Setup native 打包 fx-jar 时出错 [fx :deploy] java. io.IOException

标签 java ant javafx java-8 inno-setup

更新:

我发现问题出在 Inno Setup 上。安装程序正在创建,但 Inno Setup 会自动尝试运行需要管理员权限的安装程序。由于未授予这些权限,因此安装程序失败。

如果我将权限授予使用 Inno Setup 准备的任何其他安装程序,则在授予权限几分钟后会创建 native 包。但是,如果我在更长的时间后尝试,它会再次给出错误。

原创

我正在尝试将我的 exe 文件从我的 JavaFX 项目打包到 Eclipse 中。 我使用 JDK 1.8.0_25 和 Inno Setup 5 通过 build.xml Ant 脚本进行创建。

我的代码到达 fx:deploy 部分,我在尝试使用 Inno Setup 创建 exe 文件时遇到此错误。我的 Inno Setup 在系统路径中,当我检查任务管理器时,我看到实际正在使用 Inno Setup。

这是我得到的完整堆栈跟踪:

Using base JDK at: C:\Program Files\Java\jdk1.8.0_25\jre\..\jre
[fx:deploy] java.io.IOException: Exec failed with code 2 command [[C:\Program Files (x86)\Inno Setup 5\iscc.exe, /oE:\Code\Java\ProjectHome\build\deploy\bundles, C:\Users\SHUBHA~1\AppData\Local\Temp\fxbundler7925821782057479088\images\win-exe.image\ProjectHome.iss] in C:\Users\SHUBHA~1\AppData\Local\Temp\fxbundler7925821782057479088\images\win-exe.image
[fx:deploy]     at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:165)
[fx:deploy]     at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:138)
[fx:deploy]     at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:132)
[fx:deploy]     at com.oracle.tools.packager.windows.WinExeBundler.buildEXE(WinExeBundler.java:533)
[fx:deploy]     at com.oracle.tools.packager.windows.WinExeBundler.bundle(WinExeBundler.java:349)
[fx:deploy]     at com.oracle.tools.packager.windows.WinExeBundler.execute(WinExeBundler.java:172)
[fx:deploy]     at com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:511)
[fx:deploy]     at com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:476)
[fx:deploy]     at com.sun.javafx.tools.ant.DeployFXTask.execute(DeployFXTask.java:265)
[fx:deploy]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
[fx:deploy]     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[fx:deploy]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[fx:deploy]     at java.lang.reflect.Method.invoke(Method.java:483)
[fx:deploy]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[fx:deploy]     at org.apache.tools.ant.Task.perform(Task.java:348)
[fx:deploy]     at org.apache.tools.ant.Target.execute(Target.java:435)
[fx:deploy]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
[fx:deploy]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
[fx:deploy]     at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
[fx:deploy]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[fx:deploy]     at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:36)
[fx:deploy]     at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
[fx:deploy]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:452)
[fx:deploy]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:139)

BUILD FAILED
E:\Code\Java\ProjectHome\build\build.xml:173: Error: Bundler "EXE Installer" (exe) failed to produce a bundle.

Total time: 2 minutes 45 seconds

谁能帮忙解决这个问题?

最佳答案

那不是,你要做的是注册ant编译器的类路径。 这样做:

 1. Open Netbeans and click the Tools link at the top or press Alt-t

 2. Click options in the drop down menu from the tools or press Alt-o

 3. Click Java on the top bar, it is the Java logo

 4. Make sure you are on the ant tab, and your Ant-home has either,
    the built in Ant compiler(comes with netbeans, you do not need to set),
    or a custom one. On my computer, One virtual Machine says the Netbeans folder,
    and my Production Machine says, C:\Ant. Since I downloaded,
    and installed ant compiler myself for my production machine, more control! :D

 5. Then make sure the Verbosity Level says Normal.

 6. Then you will see a classpath box, it may be empty but should not be.

 7. For mine, I have a few JDBC connectors for my database integration,
    and the ones you need to add, which are your project you are trying
    to make the installers for. So for my project it is a timeclock manager,
    and I named it TimeClock, but I also use another project as a library in
    that project, so I have 3 things total in my Classpath.

您要确保为该项目添加任何包含 main 方法的包,所以我的有 2 个,因为其中一个只是库,所以添加到类路径中。

 8. My Classpath looks like this

  C:\Program Files (x86)\MySQL\MySQL Connector J\mysql-connector-java-5.1.34-bin.jar
 C:\Users\{my user Name}\Documents\NetBeansProjects\TimeClock\src\JFXPrint
 C:\Users\{my user Name}\Documents\NetBeansProjects\TimeClock\src\timeclock

 9. Yours should look like this, if you only have one project

C:\Users\{你的用户名}\Documents\NetBeansProjects\{你的项目名}\src\{你的包名}

 9(mine). My Project name is TimeClock and My package names,
          where my main's are located are, JFXPrint and timeclock.

 10. YOUR DONE! Click Apply, Click OK, and restart the IDE. Then open it back up
     and right click the project and package as->All installers or
     whatever you want to do.

我希望这会有所帮助,我在遇到这个问题时用谷歌搜索了这个问题,但没有人知道该怎么做。当我添加我的图标 Logo 时,我终于找到了它。我意识到我的类路径是空的,只为一个项目修复了它,我不知道将类路径设置为所有 NetBeansProject 文件夹是否有效,但我认为这不是一个好方法,全局变量永远不会是!由于我没有看到任何答案,我认为很多人都遇到了这个问题,所以我决定在找到解决方法后发布答案。

祝你好运,编程愉快!

关于java - 使用 Inno Setup native 打包 fx-jar 时出错 [fx :deploy] java. io.IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071462/

相关文章:

java - 句柄操作符的动态程序

对于任何域,Java SSL 握手总是获得 "PKIX path building failed"

android - 生成 Ant 构建文件错误

JavaFX - 多个文本字段应该过滤一个表格 View

滚动 Pane 内的 JavaFX 坐标

java - 如何通过关闭一个阶段并返回到上一个阶段的值而不打开一个新阶段?

java - java中的日期解析

java - 删除数组中的 0 值并调整大小

ant - 收到错误消息 : "unknown resolver XYZ"

java - GWT 编译为 javascript 需要大量时间