JavaFX中FXML控制器的实例返回null
我想通过Main类中的这一行为FXML控制器创建一个引用JavaFX中FXML控制器的实例返回null,javafx,controller,null,fxml,Javafx,Controller,Null,Fxml,我想通过Main类中的这一行为FXML控制器创建一个引用 Controller controller = (Controller) loader.getController(); 从类GrblListener访问控制器方法 Main.controller.updateCurrentPosition(input); 但我总是犯错误 Exception in thread "EventThread COM5" java.lang.NullPointerException 怎么了 主类: pub
Controller controller = (Controller) loader.getController();
从类GrblListener访问控制器方法
Main.controller.updateCurrentPosition(input);
但我总是犯错误
Exception in thread "EventThread COM5" java.lang.NullPointerException
怎么了
主类:
public class Main extends Application {
public static Stage stage;
public static Controller controller;
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Scene.fxml"));
Parent root = (Parent) loader.load();
Controller controller = (Controller) loader.getController();
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("css/default.css").toExternalForm());
stage.setTitle("...");
stage.setScene(scene);
stage.show();
this.stage = stage;
}
public static void main(String[] args) {
launch(args);
}
}
GrblListener类:
class GrblListener implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 0){
try {
String input = GrblSender.serialPort.readString();
System.out.println(input.trim());
Main.controller.updateCurrentPosition(input);
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
}
您正在
start()
中声明一个局部变量,并对其进行初始化:
Controller controller = (Controller) loader.getController();
不是初始化您声明的静态
变量:
public static Controller controller ;
public void start(Stage stage) {
controller = (Controller) loader.getController();
// ...
}
您正在
start()
中声明一个局部变量,并对其进行初始化:
Controller controller = (Controller) loader.getController();
不是初始化您声明的静态
变量:
public static Controller controller ;
public void start(Stage stage) {
controller = (Controller) loader.getController();
// ...
}
如何连接控制器?手动?还是在FXML中?难道你没有忘记FXML中的fx:controller=“controller”吗?我用SceenBuilder创建了FXML,所以我连接了fx:controller=“package.controller”。现在我通过在GrblListener类中创建一个公共变量来避免这个问题,然后在Class controller中每隔一秒用定时器检查一次以触发该操作。。。不是最好的解决方案…我发布的解决方案有什么问题?如何连接控制器?手动?还是在FXML中?难道你没有忘记FXML中的fx:controller=“controller”吗?我用SceenBuilder创建了FXML,所以我连接了fx:controller=“package.controller”。现在我通过在GrblListener类中创建一个公共变量来避免这个问题,然后在Class controller中每隔一秒用定时器检查一次以触发该操作。。。不是最好的解决方案…我发布的解决方案有什么问题?