Comstackr el código usando JavaFX 2.0 (usando la línea de comando)

Me pregunto cómo comstackr código usando JavaFX, desde un shell de Windows.

Tengo este código en 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() { @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(); } } 

Oracle Java 8

Si está utilizando Oracle Java 8 o una versión más nueva, como señaló cayhorstmann en su respuesta, las clases de JavaFX están ahora en el classpath de tiempo de ejecución predeterminado para una implementación de Oracle Java. Puede ejecutar javac y java en su progtwig y las clases de JavaFX se encontrarán como se espera, al igual que cualquier otra clase en el JRE.

 javac Fxservidor.java java Fxservidor 

OpenJDK 8

Si está utilizando OpenJDK 8, (actualmente) necesitará comstackr las fonts de JavaFX desde el repository de OpenJFX y colocar el jfxrt.jar resultante en su classpath similar a la descripción de Java 7 definida en esta respuesta.

JavaFX 2.x / Java 7

Utiliza el comstackdor de Java para comstackr progtwigs JavaFX:

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

Reemplace los marcadores de posición JDK_HOME y JAVAFX_SDK_HOME con las rutas a su JDK instalado y JavaFX SDK, respectivamente.

Aquí se proporciona un ejemplo de script por lotes para el desarrollo de línea de comandos JavaFX 2.x y el empaquetado de implementación.

Aquí hay un comando que ejecuté en mi máquina para comstackr su aplicación (necesita ajustar la ruta de clases para su entorno):

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

Y aquí hay un comando que solía ejecutar la clase comstackda:

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

Tenga en cuenta el ;. tokens utilizados para anexar el directorio actual al classpath del comando java execution en Windows (si usa una variante Unix, entonces use :. lugar de ;. ).

Aplicación de muestra

Aquí hay una versión modificada de su progtwig que comstackrá:

 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() { @Override public void handle(ActionEvent event) { System.out.println("Hello); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); } } 

Despliegue Recomendación

Si está implementando aplicaciones para los usuarios, incluso con Java 8, se recomienda empaquetar aplicaciones utilizando herramientas de empaquetado relevantes (por ejemplo, tareas de JavaFX y tareas , javafxpackager , javafx-maven-plugin o javafx-gradle-plugin ).

Si solo desea realizar un desarrollo y prueba de línea de comando rápido, de progtwigs pequeños, esas herramientas de empaque adicionales no son necesarias y puede simplemente usar los pasos simples en esta respuesta.

En macbook, osx, etc., puede comstackr:

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

y correr:

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

Tenga en cuenta el .: lugar de .;

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

JavaFX2.0 beta el comando anterior en Ubuntu Linux con JavaFX2.0 beta compilé sus archivos de clase, pero cuando intenté ejecutarlo con este comando, no funcionó.

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

Este es el mensaje de error que recibo:

Error: no se pudo encontrar o cargar la clase principal Fxservidor

FWIW, en JDK 8, el contenedor JavaFX parece estar disponible sin tener que ponerlo en el classpath.

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

funciona como esperarías

La solución simple pero cruda es poner una copia del archivo jfxrt.jar en el directorio … / jre7 / lib / ext en su instalación java.

Entonces, siempre debes tenerlo disponible en tu classpath.

No recomendado para la distribución de aplicaciones jfx, por supuesto, pero conveniente para desarrolladores que están jugando …

(Para una explicación, ver: http://docs.oracle.com/javase/tutorial/ext/basics/install.html )