Компиляция и запуск с 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 файлыOracleJavaFX 2.1 SDKlibrtjfxrt.jar on my командной строки компилятора 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.run(Unknown Source)
    at java.net.URLClassLoader.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.сцена.сми.Сми. Но моя переменная %CLASSPATH% определенно имеет "c:Program файлыOracleJavaFX 2.1 SDKlibrtjfxrt.фляги" в нем.

какие идеи? Заранее спасибо!

2 ответов


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

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

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

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

вот ссылка на ранняя двоичная сборка jdk7u6.

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

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

вот пример компиляции командной строки и выполнения программы 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. Эти задачи будут вставлять класс launcher в ваше упакованное приложение, которое будет определять версию и местоположение среды выполнения JavaFX так что вам не нужно указывать jfxrt.расположение jar, если вы не хотите переопределить расположение по умолчанию для платформы.


для Java 7 update 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