2012-02-24 76 views
24

我想知道如何使用JavaFX從Windows外殼編譯代碼。使用JavaFX 2.0編譯代碼(使用命令行)

我有這樣的代碼在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(); 
    } 
} 

回答

24

甲骨文的Java 8

如果您使用的是Oracle的Java 8或更新版本,在他的回答中指出cayhorstmann,JavaFX類現在在Oracle Java實現的默認運行時類路徑上。您可以在程序上運行javacjava,JavaFX類將按預期方式發現,就像JRE中的其他類一樣。

javac Fxservidor.java 
java Fxservidor 

的OpenJDK 8

如果您使用的OpenJDK 8,你會(目前)從的OpenJFX庫需要build the JavaFX sources和並把得到的jfxrt.jar在classpath類似的說明在這個答案中定義了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 。

提供了用於JavaFX 2.x命令行開發和部署打包的示例窗口批處理腳本here

這是我跑我的機器上編譯應用程序的命令(您需要調整您的環境類路徑):

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 

注意用於追加當前目錄的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); 
      } 
     }); 

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

} 

部署建議

如果要部署應用程序的用戶,甚至是與Java 8,建議您使用相關包裝工具(如JavaFX ant tasksjavafxpackagerjavafx-maven-pluginjavafx-gradle-plugin)。

如果你只是想做一些快速的命令行開發和測試,小程序,那些額外的打包工具是不需要的,你可以使用這個答案中的簡單步驟。

+0

錯誤:無法找到符號應用程序 – Jhuaraya 2012-02-24 19:06:30

+0

我更新了答案,以包含示例代碼中缺少的導入語句,註釋掉未應用的Synthetizer類,以便代碼可以編譯並添加我用於編譯和運行的確切命令更新的程序。 – jewelsea 2012-02-24 20:59:31

5
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 

這是錯誤消息我得到:

Error: Could not find or load main class Fxservidor

+2

我更新了我的答案:在Linux下,您需要將':.'附加到運行時類路徑以允許java運行時查找已編譯到當前目錄的類。 – jewelsea 2012-05-13 18:23:25

8

在的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 

請注意0​​而不是.;

1

原始而簡單的解決方案是將jfxrt.jar文件的副本到 .../jre7/lib/ext目錄 目錄Java安裝下。

然後,您應該始終在您的類路徑中使用它。

不推薦用於分發JFX的應用程序,當然,也方便開發商玩弄......

(有關說明,請參見:http://docs.oracle.com/javase/tutorial/ext/basics/install.html

3

FWIW,在JDK 8,JavaFX的罐子似乎無需將其放在類路徑中即可使用。

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

工程就像你所期望的一樣。

+0

是的,我的回答是過時的 - 我更新它以包含新的信息。 – jewelsea 2013-07-17 06:25:37