私はJavaFXを使用するのに非常に新しく、FXMLでJavaFXを使用する際にいくつか問題があります。私は、クリックすると(Arduinoへの)接続で新しいウィンドウを開く "Setup"ボタンでプログラムを作成しています。メニューには、ボードに接続する別のボタン(「接続」)があります。これでウィンドウが閉じます。私はこの変更を元の "setup"ボタンのテキストを "disconnect"に変更したいと思っていますが、私は "setup window"からボタンにアクセスできないようです。たび私は、私は次のエラーを取得する「接続」をクリックします:ボタン内のテキストを別のウィンドウ(JavaFX + FXML)からどのように変更しますか?
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
私は、これはnullポインタ例外のラッパーであることをオンラインで読みます。私は、 "セットアップ"ボタンがnullであると仮定し、それを変更することはできませんが、私はなぜそれを解決することはできません。ここで
はMainController.javaからの抜粋です。
@FXML
protected void setUpConnection(ActionEvent e) {
SetupController setupController = new SetupController();
setupController.init(this);
}
「設定」ボタンをクリックすると、上記の方法は、(ファイル内のセット:setupMenu.fxml)呼び出されます。これにより、別のウィンドウが開きます。ここでは、ウィンドウを開きますSetupController.javaでコードされています
private void openSetupWindow() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("setupMenu.fxml"));
Parent root1 = (Parent)loader.load();
Stage stage = new Stage();
stage.setTitle("Setup Connection");
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception exc) {
exc.printStackTrace();
}
}
接続ボタンをクリックすると、(SetupController.javaで)以下のメソッドが呼び出されます。
private void changeButtonText(ConnectionEventType e) {
Button b = main.getSetupButton();
if(e == ConnectionEventType.CONNECT) {
b.setText("Disconnect");
}
else {
b.setText("Setup Connection...");
}
}
(メインがありますsetupController.init()に渡されたMainControllerオブジェクト 上記のコードは、エラーが発生している場所です。 私は2つの別々のfxmlファイルを持っています.1つはメインウィンドウ用、もう1つはポップアップ用です。 sample.fxml(メインウィンドウ)は、そのコントローラーはメインコントローラに設定されている(下記)Main.javaに設定されている:
@Override
public void start(Stage primaryStage) throws Exception{
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
GridPane root = loader.load();
Scene scene = new Scene(root, 1200, 900);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("Nest Control");
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
は私が間違ってボタンにアクセスしようとしていますか?誰でも手伝ってくれますか?私が言ったように、私はJavaFXやFXMLの使用経験はあまりありません。
ありがとうございます。私は私の質問がちょっと長くて複雑であることを理解しています。私があなたが示唆したものと遊んだ後、私は更新します。再度、感謝します – liamw9