Подтвердить что ты не робот

Компиляция и работа с JavaFX 2.1

Я пытаюсь очень просто использовать JavaFX, используя простой набор строк кода, который я получил с другой страницы stackoverflow (здесь). Но проблема явно не в этом коде, а в чем-то более фундаментальном в процессе сборки и запуска.

Вот мой код:

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".

Любые идеи? Заранее благодарю вас!

4b9b3361

Ответ 1

Этот вопрос несколько дублирует вручную компилировать javafx 2.0.

Этот ответ специально для версий JavaFX 2 до выпуска Oracle Java 8. Для Oracle JavaFX 8+ среда исполнения JavaFX находится в пути к классам, поэтому вам не нужно явно добавлять ее при компиляции или запуске приложений JavaFX.

Java включает JavaFX в jdk7u6 и выше (для Windows и Linux) и jdk7u4 и выше (для OSX).

Загрузите и используйте jdk7u6 +, и вам не нужно указывать файл jfxrt.jar в любом пути к классам, и все ваши связанные с JavaFX проблемы с классами должны исчезнуть.

Ниже приведена ссылка на раннюю двоичную сборку jdk7u6 .

Для JavaFX 2.1 в Windows вам нужно включить jfxrt.jar lib в свой путь к классу для компиляции (NetBeans сделает это автоматически, если вы используете настройки платформы JavaFX) и (если вы не правильно упаковали свое приложение, используя javafxpackager или JavaFX ant), также во время выполнения.

JavaFX 2.1 для Linux является предварительным выпуском (в случае, если вы используете это). Для предварительного выпуска Linux вам нужно будет включить jfxrt.jar в свой путь к классам как для компиляции, так и для выполнения, если среда исполнения JavaFX в Linux была настроена неправильно.

Вот пример компиляции командной строки и выполнения программы JavaFX под окнами.

Запустите редактор:

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, если вы не хотите переопределять местоположение по умолчанию для платформы.

Ответ 2

Для обновления Java 7 21, Windows XP SP3, я использовал

javac -cp "\Program Files\Java\jre7\lib\jfxrt.jar"   HelloWorld.java

и

java -cp ".;\Program Files\Java\jre7\lib\jfxrt.jar"   HelloWorld