如何将javafx类转换为运行时?

ama*_*urs 5 javafx maven

我愿意第一次尝试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>
Run Code Online (Sandbox Code Playgroud)

这解决了我的构建问题,但是我无法运行程序,我试图运行这个简单的例子,但是我得到了这个错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

jew*_*sea 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 jobsjavafxpackagerjavafx-maven-pluginjavafx-gradle-plugin)正确打包应用程序。

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

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