9

我有 javaFX 项目,我正在使用它来开发 Eclipse IDE。这是使用 Spring 的 Maven 项目。我的目标是从这个项目制作可运行的 jar 文件(dekstop 应用程序)。

如果我像任何其他 java 项目一样将我的应用程序导出到 jar 文件,那么我会收到以下错误消息:

C:\eclipse\projjars>java -jar EqMan.jar
Exception in thread "main" java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: C:\eclipse\bin\glass.dll
        at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:276)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:122)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:163)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: Can't load library: C:\eclipse\bin\glass.dll
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:143)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:56)
        at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:31)
        at com.sun.glass.ui.Application$1.run(Application.java:75)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:73)
        at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:85)
        at com.sun.glass.ui.win.WinApplication.<clinit>(WinApplication.java:33)
        at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:20)
        at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:17)
        at com.sun.glass.ui.Application.Run(Application.java:108)
        at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:266)
        ... 5 more

如果我尝试使用 javafxpackager 制作 jar 文件,我会收到以下错误:

C:\eclipse\workspace\equification>javafxpackager -makeall -appclass ru.igs.ava.equification.EquificationFX -name "Equification" -width 800 -height 600
warning: [options] bootstrap class path not set in conjunction with -source 1.5
C:\eclipse\workspace\equification\src\main\java\ru\igs\ava\equification\EqConfigureRole.java:5: error: package org.springframework.context does not exist
import org.springframework.context.ApplicationContext;
C:\eclipse\workspace\equification\src\test\java\ru\igs\ava\equification\AppTest.java:11: error: cannot find symbol
    extends TestCase
            ^
//and the same error for every class, which is added to my project as maven dependency.

那么,如何在不将我的项目转换为 NetBeans 项目的情况下制作可运行的 jar 文件?

4

2 回答 2

5

看到您正在使用 Maven 进行构建,您还可以使用 Maven 来启动 JavaFX 打包。为此,请使用 Maven antrun插件调用JavaFX ant 任务,为您的应用程序生成一个带有嵌入式 JavaFX 启动器的 jar。这是执行此操作的示例 maven pom


您在运行 javafx 打包程序时出现的错误是由于未正确设置打包程序的类路径。如何为 javafx 打包器设置类路径以打包依赖于依赖库 jar 的应用程序的示例在此构建脚本中。


不满意的链接错误是因为您在运行应用程序时没有在相对于 jfxrt.jar 的运行时位置的 ../bin 目录中包含所需的 lib dll。您也可能没有使用 JavaFX 启动器正确打包您的应用程序(通过执行推荐的 javafx ant 任务或 javafxpackager 命令来生成您的 JavaFX 应用程序 jar)。

更新

对于基于 Maven 的 JavaFX 应用程序构建,您现在可以使用Maven JavaFX 插件

于 2012-07-05T18:59:25.583 回答
0

怀疑根本问题是由于 jfxrt.jar 和安装的 Java 版本不兼容对我有用。应用程序使用的 jfxrt.jar 与 jdk-7u71 兼容,但应用程序位于 JAVA_HOME 设置为 7.0.05 的机器上。所以我在问题机器上安装了jdk-7u71并更新了JAVA_HOME。

于 2014-12-04T02:24:45.903 回答