JavaFXとSceneBuilderを使って2つ目のウィンドウを開くときに詰まった話
本題の話
NullPointerException
fxmlファイルにコントローラーを書く
BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/19" fx:controller="application.JavaFXTestController"
このように最後にコントローラーの名前を追加する必要がありました。
もしくはSceneBuilderの左下を開いてコントローラーを選択すればよいと思います。
宣言方法のミス
void SecondWindow() throws IOException { FXMLLoader loader = new FXMLLoader(getClass().getResource("SecondWindow.fxml")); VBox root = (VBox) loader.load(); Scene scene = new Scene(root); Stage stage = new Stage(); //ぬるぽエラー //SecondWindowController SecondWindow = new SecondWindowController; SecondWindowController SecondWindow = loader.<SecondWindowController>getController(); SecondWindow.label.setText("TestLabelSet"); stage.setTitle("Second Window"); stage.setScene(scene); stage.showAndWait(); }
普通にインスタンス生成するときみたいにnewで作っていたのですがそこでエラーが出てました。
多分どこ見てもこんな方法してないと思うのでちゃんと見なきゃなと思いましたね。
RIPTutorial のCreating Custom Dialog *1を参考にさせていただきました。
JavaFXランタイム・コンポーネントが不足しており、このアプリケーションの実行に必要です
実行構成のVM引数に書き足す
--module-path "(C:\javafx-sdk-19\lib)" --add-modules javafx.controls,javafx.fxml
PATHを通す
ユーザー環境変数(U)
Path : C:\javafx-sdk-19\bin
システム環境変数(C)
変数 : CLASSPATH , 値 : C:\javafx-sdk-19\lib\*
変数 : JAVAFX_HOME , 値 : C:\javafx-sdk-19\lib
多分これは治った原因ではないです。
今後eclipseで実行の構成が楽になるだけだと思います。
Launcherクラスを作成
mainメソッドがあるクラスが
javafx.application.Application
を継承していると実行することができないらしいです。
新しくLauncherクラスを作成し、そこで継承すればよいとのこと。
Launcherクラスの中身はこちらです。
package application; import javafx.application.Application; public class Launcher { public static void main(String[] args) { Application.launch(Main.class); } }
JavaFXのインストーラーを作成する手順 - その他つまづいたところ等*2を参考にさせていただきました。
多分これをして治ったと思います。
あとがきの話
また何か詰まったら解決方法追加していこうと思います。
それでは。
参考にさせていただいたサイト
*1:RIPTutorial - Creating Custom Dialog riptutorial.com
*2:Fire Sign Blog - JavaFXのインストーラーを作成する手順 blog.fire-sign.info