2012-02-24 3 views
24

Je me demande comment compiler du code en utilisant JavaFX, à partir d'un shell Windows.Compiler le code en utilisant JavaFX 2.0 (en utilisant la ligne de commande)

J'ai ce code dans 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(); 
    } 
} 

Répondre

24

Oracle Java 8

Si vous utilisez Oracle Java 8 ou plus récent, comme l'a souligné cayhorstmann dans sa réponse, les classes JavaFX sont maintenant sur le chemin de classe d'exécution par défaut pour une implémentation Oracle Java. Vous pouvez simplement exécuter javac et java sur votre programme et les classes JavaFX seront trouvées comme prévu, tout comme n'importe quelle autre classe dans le JRE.

javac Fxservidor.java 
java Fxservidor 

OpenJDK 8

Si vous utilisez OpenJDK 8, vous aurez (actuellement) doivent build the JavaFX sources du référentiel et OpenJFX et placez-le sur votre jfxrt.jar résultante classpath similaire à la description Java 7 défini dans cette réponse.

JavaFX 2.x/Java 7

Vous utilisez le Java Compiler pour compiler des programmes JavaFX:

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

Remplacer les espaces réservés JDK_HOME et JAVAFX_SDK_HOME avec les chemins de votre installation JDK et SDK JavaFX respectivement .

Un exemple de script batch Windows pour le développement et le déploiement de la ligne de commande JavaFX 2.x est fourni here.

Voici une commande que je courais sur ma machine pour compiler votre application (vous devez régler le classpath pour votre environnement):

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

Et est une commande ici, je dirigeais la classe compilée:

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

Notez les ;. jetons utilisés pour ajouter le répertoire courant au classpath de la commande d'exécution java dans Windows (si vous utilisez une variante Unix, puis utilisez :. au lieu de ;.).

App échantillon

Voici une version modifiée de votre programme qui compilera:

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

} 

déploiement Recommandation

Si vous déployez des applications aux utilisateurs, même avec Java 8, il est recommandé d'emballer les applications à l'aide d'outils d'emballage appropriés (par exemple JavaFX ant tasks, javafxpackager, javafx-maven-plugin ou javafx-gradle-plugin).

Si vous voulez simplement développer et tester rapidement des programmes de petite taille, ces outils de packaging supplémentaires ne sont pas nécessaires et vous pouvez simplement utiliser les étapes simples de cette réponse.

+0

Erreur: Impossible de trouver le symbole Application – Jhuaraya

+0

J'ai mis à jour la réponse pour inclure les instructions d'importation manquantes de votre exemple de code, commentez la classe Synthetizer non fournie afin que le code puisse compiler et ajouter la commande exacte utilisée pour compiler et exécuter le programme mis à jour. – jewelsea

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

j'ai couru la commande ci-dessus sur Linux Ubuntu avec JavaFX2.0 beta il a compilé pour les fichiers de classe, mais quand j'essayé de courir avec cette commande, il ne fonctionne pas.

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

C'est le message d'erreur que je reçois:

Error: Could not find or load main class Fxservidor

+2

J'ai mis à jour ma réponse: sous Linux, vous devez ajouter ': .' au classpath runtime pour permettre à Java Runtime de trouver les classes que vous avez compilées dans le répertoire courant. – jewelsea

8

Dans macbook, osx, etc, vous pouvez compiler:

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

et exécutez:

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

Notez le .: au lieu de .;

1

solution brute mais simple est de mettre une copie du fichier jfxrt.jar dans le répertoire .../jre7/lib/ext sous votre installation java.

Ensuite, vous devriez toujours l'avoir sur votre chemin de classe.

Non recommandé pour la distribution des applications de JFX, bien sûr, mais pratique pour les développeurs jouer autour ...

(Pour plus d'explications, voir: http://docs.oracle.com/javase/tutorial/ext/basics/install.html)

3

FWIW, à 8 JDK, le pot JavaFX semble être disponible sans avoir à le mettre sur le classpath.

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

fonctionne comme vous pouvez vous y attendre.

+0

Oui, ma réponse était datée - je l'ai mise à jour pour inclure la nouvelle information. – jewelsea

Questions connexes