2012-02-24 26 views
24

Me pregunto cómo compilar código usando JavaFX, desde un shell de Windows.Código de compilación usando JavaFX 2.0 (usando la línea de comando)

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<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(); 
    } 
} 

Respuesta

24

Oracle Java 8

Si está utilizando Oracle Java 8 o más reciente, como ha señalado cayhorstmann en su respuesta, clases JavaFX son ahora en el classpath de tiempo de ejecución predeterminado para una implementación de Oracle Java. Puede ejecutar javac y java en su programa 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, usted (en la actualidad) que tenga que build the JavaFX sources desde el repositorio y OpenJFX y colocar el jfxrt.jar resultante en su ruta de clase similar a la descripción de Java 7 definido en esta respuesta.

JavaFX 2.x/Java 7

utiliza el Java Compiler para compilar programas JavaFX:

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

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

Se proporciona un ejemplo de secuencia de comandos por lotes para el desarrollo de la línea de comandos JavaFX 2.x y el paquete de implementación here.

Aquí es un comando me encontré en mi máquina para compilar su aplicación (es necesario ajustar la ruta de clase para su entorno):

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

Y aquí es un comando que se utiliza para ejecutar la clase compilada:

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

Nota ;. las fichas que se utilizan para añadir el directorio actual a la ruta de clase de la orden de ejecución de java en Windows (si se utiliza una variante de Unix, a continuación, utilizar :. en lugar de ;.).

aplicación de ejemplo

Aquí es una versión modificada de su programa, que compilará:

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); 
      } 
     }); 

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

} 

Recomendación Despliegue

Si va a distribuir aplicaciones a los usuarios, incluso con Java 8, se recomienda empacar las aplicaciones utilizando las herramientas de embalaje relevantes (por ejemplo, JavaFX ant tasks, javafxpackager, javafx-maven-plugin o javafx-gradle-plugin).

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

+0

Error: No se puede encontrar el símbolo Aplicación – Jhuaraya

+0

Actualicé la respuesta para incluir las instrucciones de importación que faltan de su código de muestra, comente la clase Synthetizer sin suministro para que el código pueda compilar y agregue el comando exacto que utilicé para compilar y ejecutar el programa actualizado – jewelsea

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

Me corrió el comando anterior en Ubuntu Linux con JavaFX2.0 beta se recopiló de los archivos de clase, pero cuando traté de 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 consigo:

Error: Could not find or load main class Fxservidor

+2

Actualicé mi respuesta: bajo Linux necesita agregar ': .' al classpath en tiempo de ejecución para permitir que el tiempo de ejecución java encuentre las clases que ha compilado en el directorio actual. – jewelsea

8

En el macbook, OSX, etc, se puede compilar:

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

y ejecutar:

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

Tenga en cuenta el .: en lugar de .;

1

solución cruda pero simple es poner una copia del archivo en el jfxrt.jar .../jre7/lib/ext directorio en la instalación de Java.

Luego, siempre debe tenerlo disponible en su classpath.

No

recomendado para la distribución de aplicaciones Jfx, por supuesto, pero es práctico para jugar un rato ... desarrollador

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

3

Fwiw, en el JDK 8, el frasco 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 era de esperar.

+0

Sí, mi respuesta estaba fechada - La actualicé para incluir la nueva información. – jewelsea

Cuestiones relacionadas