非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

JavaFXのコンパイルと実行時にFXMLを使うためのコマンドオプション

   

前回はJavaFXを使う際にコンパイルと実行時にはオプションを渡す必要があることを書きました。

 

しかし、この方法だとFXMLファイルをともなったプログラムには対応できません。以下のようなエラーが発生してしまいます。このあたり、Java8のときとルールが変わってしまっていますね。Java8のときはオプションなしのjavacだけでOKだったのですが…。今回はJavaFXでFXMLを使うためのコマンドオプションについて書きます。

 

以下のように--add-modulesオプションにjavafx.fxmlを渡せばOKです。※exportコマンドのopenjfxのパスは任意で。

export PATH_TO_FX=/home/c340/lib/openjfx-11.0.2_linux-x64_bin-sdk/javafx-sdk-11.0.2/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls,javafx.fxml Hello.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls,javafx.fxml Hello
 

 

試した結果を下記しておきます。

まず、SeneBuilderで適当なFXMLファイルを作っておいて…

 

以下のプログラムを作ってコンパイル・実行させましょう。

import javafx.application.Application;
import javafx.fxml.*;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.AnchorPane;
import javafx.event.ActionEvent;
import javafx.scene.control.*;

public class Hello extends Application implements Initializable {
  @FXML private Label label;

  @Override
  public void start(Stage stage) throws Exception{
    AnchorPane root = FXMLLoader.load(getClass().getResource("Hello.fxml"));
    stage.setTitle("Hello World");
    stage.setScene(new Scene(root));
    stage.show();
  }

  @Override
  public void initialize(java.net.URL url, java.util.ResourceBundle bundle) {
    label.setText("Hell World");
  }

  public static void main(String[] args) {
    launch(args);
  }

  @FXML
  public void onClick(ActionEvent e) {
    label.setText("Hello FXML");
  }
}
 

 

以下のウィンドウが起動したら成功です。

 

ボタンを押すとHello FXMLという文字になりますが、今回の主旨からは外れるので説明は除外。

 

スポンサーリンク

 - Java