这是我第一次使用 JavaFX,我尝试创建一个对整个场景使用react的 KeyListener (KeyTyped),因为我不喜欢总是点击文本字段/区域等。
所以我得到了以下代码:
package view;
import controller.Function;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class MainGame implements Initializable {
public TextField txtText;
protected String word = "ABC";
void start(ActionEvent event) throws IOException {
URL url = new File("src/main/java/view/MainGame.fxml").toURI().toURL();
Parent MainGame_parent = FXMLLoader.load(url);
Scene MainGame_scene = new Scene(MainGame_parent);
Stage primaryStage_stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
primaryStage_stage.setScene(MainGame_scene);
primaryStage_stage.show();
MainGame_scene.addEventFilter(KeyEvent.KEY_TYPED, (KeyEvent ev) -> {
//System.out.println(Function.decrypt(word, txtText.getText(), ev.getCharacter().charAt(0)));
//txtText.setText(Function.decrypt(word, txtText.getText(), ev.getCharacter().charAt(0)));
//Function.won(word, txtText.getText());
});
}
@Override
public void initialize(URL url, ResourceBundle rb) {
txtText.setText(Function.encrypt(word));
}
}
现在,这段代码本身可以工作,只是如果按下某个键,它不会执行任何操作。这三个注释是造成这种情况的原因,但是每当我取消注释一个或多个注释时,它们都会导致 NullPointerException。我已经尝试过打印不同的值。除了 txtText 之外的每个值都有效,这会导致 NullPointerException。
我尝试将它移动到不同的地方,将其放入自己的函数中,将其放入初始化中,而不是在类主体中声明它,而是在函数中声明它,并且我还尝试将 start 方法的其余部分放入构造函数中。遗憾的是这些方法都不起作用。
我不知道该怎么做以及如何解决这个问题。 感谢您的帮助!
最佳答案
您的 TextField txtText
在您尝试使用它之前尚未初始化。你应该这样做
public TextField txtText = new TextField();
而不是
public TextField txtText;
关于JavaFX TextField 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59601138/