gpt4 book ai didi

java - 使用 JavaFX 2.1 编译运行

转载 作者:搜寻专家 更新时间:2023-10-30 21:11:47 25 4
gpt4 key购买 nike

我正在尝试使用一组简单的代码行来非常简单地使用 JavaFX,这些代码行是我从另一个 stackoverflow 页面 (here) 获得的。但是,问题显然不在于该代码,而在于构建和运行过程中更基本的东西。

这是我的代码:

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
.
.
.
Media medMsg = new Media("msg.mp3");
MediaPlayer medplMsg = new MediaPlayer(medMsg);
medplMsg.play();

起初我根本无法编译它。最终我发现我需要将 -classpath c:\Program Files\Oracle\JavaFX 2.1 SDK\lib\rt\jfxrt.jar 放在我的 javac 命令行中。 (这里一个明显的复杂问题是:为什么没有在任何明显的地方记录(1)这是必需的,以及(2)如何准确地找出 JavaFX 安装的路径是什么?!)

但是,当我运行代码时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/scene/media/Media

at progtest.main(progtest.java:120)
Caused by: java.lang.ClassNotFoundException: javafx.scene.media.Media
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

这是什么意思?看起来它在运行时不知道如何找到类 javafx.scene.media.Media。但是,我的 %CLASSPATH% 变量中肯定有“c:\Program Files\Oracle\JavaFX 2.1 SDK\lib\rt\jfxrt.jar”。

有什么想法吗?提前致谢!

最佳答案

这个问题有点重复 compile javafx 2.0 manually .

此答案专门针对Oracle Java 8 发布之前的JavaFX 2 版本。对于Oracle JavaFX 8+,JavaFX 运行时在类路径中,因此您无需在编译或JavaFX 时显式添加它正在运行的应用程序。

Java 在 jdk7u6 及更高版本(适用于 Windows 和 Linux)和 jdk7u4 及更高版本(适用于 OSX)中包含 JavaFX。

下载并使用 jdk7u6+,您将不需要在任何类路径中指定 jfxrt.jar 文件,所有与 JavaFX 相关的类路径问题都会消失。

这是一个指向 early binary build of jdk7u6 的链接.

对于 Windows 上的 JavaFX 2.1,您确实需要在类路径中包含 jfxrt.jar 库以进行编译(如果您使用它的 JavaFX 平台设置,NetBeans 会自动执行此操作)和(如果您没有使用javafxpackager 或 JavaFX ant 任务),也在运行时。

适用于 Linux 的 JavaFX 2.1 是一个预发行版(如果您正在使用它)。对于 Linux 预发布版,如果 Linux 上的 JavaFX 运行时设置不正确,您只需在编译和运行时将 jfxrt.jar 包含在类路径中。

下面是一个JavaFX程序在windows下的命令行编译和执行的例子。

启动编辑器:

C:\dev\test>notepad HelloWorld.java

粘贴以下代码并保存:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
stage.setScene(new Scene(new Label("Hello World")));
stage.show();
}
}

编译并运行 JavaFX 2.2:

C:\dev\test>javac -cp "\Program Files\Oracle\JavaFX 2.2 Runtime\lib\jfxrt.jar" HelloWorld.java
C:\dev\test>java -cp ".;\Program Files\Oracle\JavaFX 2.2 Runtime\lib\jfxrt.jar" HelloWorld

对于 Oracle Java 8+,不需要显式的 JavaFX 类路径说明符:

C:\dev\test>javac HelloWorld.java
C:\dev\test>java HelloWorld

请注意,通常不只是编译代码并运行它,您还可以使用 javafxpackager 或 javafx ant 任务打包代码。这些任务会将一个启动器类嵌入到您的打包应用程序中,该应用程序将检测 JavaFX 运行时的版本和位置,这样您就无需指定 jfxrt.jar 位置,除非您想覆盖平台的默认位置。

关于java - 使用 JavaFX 2.1 编译运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com