私のGUIを記述するfxmlがあります。私はguiのテキストを変更し、どこでもキープレスでタスクを開始したいと思います。fxmlを使ってJavafxのmainSceneにイベントリスナーを追加
FXML
<Text fx:id="barcodeText"/>
コントローラ
@FXML
Text barcodeText;
public void start(Stage primaryStage) throws IOException {
this.primaryStage=primaryStage;
Scene mainScene =new Scene(root);
primaryStage.setScene(mainScene);
primaryStage.setResizable(false);
primaryStage.show();
Parent root = FXMLLoader.load(getClass().getResource("/view/foo.fxml"));
mainScene.addEventHandler(KeyEvent.KEY_PRESSED,new KeyboardEventHandler(){
@Override
public void handle(KeyEvent event) {
barcodeText.setText("foo");
}
});
私はイベントを発生時にこれが私のbarcodeTextポインタのための(JavaFXのアプリケーションスレッド内)NullPointerException
を与えます。
何か間違っていますか?
私が調べた例では、fxmlを使用しないでこのアプローチを使用していましたが、ハンドラを定義するためにアノテーションを使用する必要がありますか?どこでfxmlにシーンの "onAction"を置くのですか?
'@FXMLテキストテキストボックス;または' @FXMLテキストバーコードテキスト; '? – pzaenger
FXMLローダは、 'start'が呼び出された' Application'クラスのインスタンスではなく、*コントローラ*の '@ FXML'アノテーション付きフィールドを初期化します。ですから、 'barcodeText'(または' textBox'など)は、 'Application'インスタンスではnullになります。 –
@pzaenger申し訳ありませんが、それはタイプミスです。 –