2012-02-24 16 views
24

Mi chiedo come compilare il codice utilizzando JavaFX, da una shell di Windows.Codice di compilazione con JavaFX 2.0 (tramite riga di comando)

Ho questo codice nella 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(); 
    } 
} 

risposta

24

Oracle Java 8

Se si utilizza Oracle Java 8 o più recente, come ha sottolineato cayhorstmann nella sua risposta, le classi JavaFX sono ora sul percorso di classe di runtime predefinito per un'implementazione Oracle Java. Puoi semplicemente eseguire javac e java sul tuo programma e le classi JavaFX verranno trovate come previsto, proprio come qualsiasi altra classe in JRE.

javac Fxservidor.java 
java Fxservidor 

OpenJDK 8

Se si utilizza OpenJDK 8, voi (al momento) è necessario build the JavaFX sources dal repository OpenJFX ed e posizionare il jfxrt.jar risultante sul classpath simile alla descrizione per Java 7 definito in questa risposta.

JavaFX 2.x/Java 7

È possibile utilizzare il Java Compiler per compilare i programmi JavaFX:

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

Sostituire i segnaposto JDK_HOME e JAVAFX_SDK_HOME con i percorsi rispettivamente al vostro installati JDK e JavaFX SDK .

Un esempio di script batch di Windows per JavaFX 2.x sviluppo della riga di comando e pacchetto di distribuzione è fornito here.

Ecco un comando ho incontrato sulla mia macchina per compilare l'applicazione (è necessario regolare il classpath per l'ambiente):

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

E qui è un comando che ho usato per eseguire la classe compilata:

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

Note le ;. token utilizzati per aggiungere la directory corrente al classpath del comando di esecuzione di java in Windows (se si utilizza una variante Unix, quindi utilizzare :. anziché ;.).

Esempio App

Ecco una versione modificata del programma, che compilerà:

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

} 

Raccomandazione Deployment

Se si distribuisce applicazioni agli utenti, anche con Java 8, si consiglia di impacchettare le applicazioni utilizzando gli strumenti di imballaggio pertinenti (ad es. JavaFX ant tasks, javafxpackager, javafx-maven-plugin o javafx-gradle-plugin).

Se si desidera solo eseguire rapidamente lo sviluppo e il test della riga di comando, di piccoli programmi, questi strumenti di packaging aggiuntivi non sono necessari e si può semplicemente utilizzare i semplici passaggi di questa risposta.

+0

Errore: Impossibile trovare il simbolo Applicazione – Jhuaraya

+0

Ho aggiornato la risposta per includere le istruzioni di importazione mancanti dal codice di esempio, commentare la classe Synthetizer non supportata in modo che il codice possa compilare e aggiungere il comando esatto utilizzato per compilare ed eseguire programma aggiornato. – jewelsea

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

Ho eseguito il comando precedente su Ubuntu Linux con JavaFX2.0 beta è compilato suoi file di classe, ma quando ho provato a farlo funzionare con questo comando non ha funzionato.

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

Questo è il messaggio di errore ottengo:

Error: Could not find or load main class Fxservidor

+2

Ho aggiornato la mia risposta: sotto Linux è necessario aggiungere ': .' al percorso classe di runtime per consentire al runtime java di trovare le classi che sono state compilate nella directory corrente. – jewelsea

8

In macbook, osx, ecc, è possibile compilare:

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

e si esegue:

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

Notare .: anziché .;

1

soluzione grezza, ma semplice è quello di mettere una copia del file jfxrt.jar nel .../jre7/lib/ext directory sotto la vostra installazione di Java.

Quindi, dovresti sempre averlo disponibile sul classpath.

Non consigliato per la distribuzione di applicazioni JFX, naturalmente, ma conveniente per gli sviluppatori suonare in giro ...

(Per una spiegazione, vedi: http://docs.oracle.com/javase/tutorial/ext/basics/install.html)

3

FWIW, in JDK 8, il vaso sembra JavaFX essere disponibile senza doverlo posizionare sul classpath.

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

funziona come ci si aspetterebbe.

+0

Sì, la mia risposta era datata - l'ho aggiornata per includere le nuove informazioni. – jewelsea

Problemi correlati