Компилировать код, используя JavaFX 2.0 (используя командную строку) - PullRequest
24 голосов
/ 24 февраля 2012

Интересно, как скомпилировать код с помощью JavaFX из оболочки Windows.

У меня есть этот код в fxservidor.java:

public class Fxservidor extends Application {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {        
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                Synthetizer os = new Synthetizer("Ximena");                
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

Ответы [ 5 ]

26 голосов
/ 24 февраля 2012

Oracle Java 8

Если вы используете Oracle Java 8 или новее, как указал cayhorstmann в своем ответе, классы JavaFX теперь находятся в пути к классам выполнения по умолчанию для реализации Oracle Java. Вы можете просто запустить javac и java в своей программе, и классы JavaFX будут найдены, как и ожидалось, как и любой другой класс в JRE.

javac Fxservidor.java
java Fxservidor

OpenJDK 8

Если вы используете OpenJDK 8, вам (в настоящее время) необходимо собрать исходные коды JavaFX из репозитория OpenJFX и поместить результирующий файл jfxrt.jar в путь к классам, аналогично описанию для Java 7, определенному в этом ответе.

JavaFX 2.x / Java 7

Вы используете Java Compiler для компиляции программ JavaFX:

"%JDK_HOME%\bin\javac" -classpath "%JAVAFX_SDK_HOME%\rt\lib\jfxrt.jar" fxservidor.java 

Замените заполнители JDK_HOME и JAVAFX_SDK_HOME на пути к установленному JDK и JavaFX SDK соответственно.

Пример пакетного сценария Windows для JavaFX 2.x предоставляет пакет разработки и развертывания командной строки здесь .

Вот команда, которую я выполнил на своем компьютере для компиляции вашего приложения (вам нужно настроить classpath для вашей среды):

javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java

И вот команда, которую я использовал для запуска скомпилированного класса:

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar;." Fxservidor

Обратите внимание на токены ;., используемые для добавления текущего каталога в classpath команды выполнения java в Windows (если используется вариант Unix, тогда используйте :. вместо ;.).

Пример приложения

Вот модифицированная версия вашей программы, которая будет компилироваться:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Fxservidor extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override public void start(Stage primaryStage) {        
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }

}

Рекомендация по развертыванию

Если вы развертываете приложения для пользователей, даже с Java 8, рекомендуется упаковывать приложения, используя соответствующие инструменты упаковки (например, Задачи ant для JavaFX , javafxpackager , javafx-maven-plugin или javafx-gradle-plugin ).

Если вы просто хотите выполнить небольшую программу для быстрой разработки и тестирования командной строки, эти дополнительные инструменты упаковки не нужны, и вы можете просто использовать простые шаги в этом ответе.

8 голосов
/ 08 ноября 2012

В macbook, osx и т. Д. Вы можете скомпилировать:

javac -cp "/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor.java

и запустить:

java -cp ".:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor

Обратите внимание на .: вместо .;

5 голосов
/ 02 апреля 2012
javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java

Я выполнил указанную выше команду в Ubuntu Linux с JavaFX2.0 beta, она скомпилировала свои файлы классов, но когда я попыталась запустить ее с помощью этой команды, она не работала.

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor

Этоя получаю сообщение об ошибке:

Ошибка: не удается найти или загрузить основной класс Fxservidor

3 голосов
/ 17 июля 2013

FWIW, в JDK 8 jar JavaFX, кажется, доступен без необходимости помещать его в путь к классам.

path/to/jdk1.8.0-b96/bin/javac HelloWorld.java
path/to/jdk1.8.0-b96/bin/java HelloWorld

работает так, как вы ожидаете.

1 голос
/ 01 мая 2013

Простое, но простое решение - поместить копию файла jfxrt.jar в каталог ... / jre7 / lib / ext под вашей установкой Java.

Затем вам следуетвсегда имейте его в своем классе.

Конечно, не рекомендуется для распространения приложений jfx, но удобно для разработчиков, играющих вокруг ...

(Объяснение см .: http://docs.oracle.com/javase/tutorial/ext/basics/install.html)

...