5

我愿意第一次尝试javafx,我去Oracle javafx网站发现javafx现在带有JDK 7u25。我更新了我的 java 版本,但我不确定我在寻找什么。每当我尝试导入和使用 javafx 类时,都会出现“找不到符号”错误。我在 %JAVA_HOME%/lib 中找到了“javafx-mx.jar”“javafx-doclet.jar”“ant-javafx.jar”文件,但据我所知,这些文件是由 JRE 而非 JDK 使用的。我真的不想依赖任何 Eclipse 插件。我使用 Maven 进行构建过程。我见过几个 javafx maven 插件,但它们似乎是针对 javafx 工具的。我是不是画错了?我将如何正确导入这些类?

编辑

现在我可以使用我在此处找到的内容来编译项目。建议添加:

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>javafx</artifactId>
  <version>2.2</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/jfxrt.jar</systemPath>
</dependency>

这解决了我的构建问题,但我无法运行程序,我正在尝试运行这个简单的示例,但出现此错误:

java.lang.NoClassDefFoundError: javafx/application/Application
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

关于如何将相同的库添加到运行时的任何想法?我正在使用maven-exec-plugin

4

1 回答 1

4

不建议仅将 jfxrt.jar 设置为 maven 系统依赖项

我不认为通过对 jfxrt.jar 的系统依赖将 maven 与您的 JavaFX 构建集成是一个好主意。

使用该方法,您将能够构建您的应用程序(因为 javafx 运行时类的系统依赖项将允许 maven 找到它们)。

但是当您使用 Java 7 运行您的应用程序时,您仍然需要手动将类路径添加到您的 java.exe 命令中,类似于使用 JavaFX 2.0(使用命令行)编译代码

我不使用 maven exec 插件,但是如果您想以这种方式使用该工具,请参阅add a jar to maven exec:java classpath ,它提供了有关为该 exec 插件设置适当类路径的说明。

首选方法

首选方法是使用推荐的部署工具(例如JavaFX ant tasksjavafxpackagerjavafx-maven-pluginjavafx-gradle-plugin)正确打包您的应用程序。

这些工具将在您的应用程序 jar 中嵌入一个小型包装器主类,如果 JavaFX 运行时可用,它将查找 JavaFX 运行时,如果不可用,则帮助指导用户完成运行时安装。

此外,如果您使用Oracle Java 8, javafx 将位于您的默认类路径中,因此您无需担心与类路径相关的问题。

于 2013-07-19T00:01:20.897 回答