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という文字になりますが、今回の主旨からは外れるので説明は除外。
スポンサーリンク