我有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文件?
答案 0 :(得分:5)
当您使用Maven进行构建时,您也可以使用Maven启动JavaFX打包。为此,请使用Maven antrun插件调用JavaFX ant tasks,以便使用嵌入式JavaFX启动程序为您的应用程序生成jar。这是一个sample maven pom来执行此操作。
运行javafx打包程序时出现的错误是由于没有正确设置打包程序的类路径。有关如何设置javafx打包程序的类路径以打包依赖于依赖库lib的应用程序的示例,请参见build script。
未满足的链接错误是因为在运行应用程序时,相对于jfxrt.jar的运行时位置,您没有在../bin目录中包含所需的lib dll。您也可能无法使用JavaFX启动程序正确打包应用程序(通过执行推荐的javafx ant任务或javafxpackager命令来生成JavaFX应用程序jar)。
<强>更新强>
对于基于Maven的JavaFX应用程序版本,您现在可以使用Maven JavaFX plugin。
答案 1 :(得分:0)
怀疑底层问题是由于jfxrt.jar与安装的Java版本之间不兼容所致。应用程序使用的jfxrt.jar与jdk-7u71兼容,但应用程序位于JAVA_HOME设置为7.0.05的计算机上。所以我在问题机器上安装了jdk-7u71并更新了JAVA_HOME。