从第一个控制器类初始化第二个控制器类时出现空指针异常

时间:2013-09-26 16:29:36

标签: javafx-2 javafx javafx-8

我正在尝试从另一个类访问另一个calss的初始化方法。但是我在返回ctroller时得到nullpointer异常

这是我试图从我的第二个呼叫中调用的代码。

    Line1-        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/src/myjavfxapp/controller/EditClientDetails.fxml"));
    Line 2-        EditClientDetailsController fooController = (EditClientDetailsController) fxmlLoader.getController();
      Line3-       fooController.initialize(null, null);

我在第3行得到空指针异常。

Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1435)
    ... 44 more
Caused by: java.lang.NullPointerException
    at myjavfxapp.controller.NewUserController.saveNewuser(NewUserController.java:167)
    ... 54 more

我的目的是初始化来自不同控制器类的“EditClientDetails.fxml”字段。

请指出我是否遗漏了什么。

1 个答案:

答案 0 :(得分:1)

尝试下面的例子它工作正常,你必须使用FxmlLoader类的load()函数。

public class Xxx extends Application {

  @Override
  public void start(Stage stage) throws Exception {

    //Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));     
    FXMLLoader loader = new FXMLLoader(getClass().getResource("Sample.fxml"));
    Parent root = (Parent)loader.load();          
    Scene scene = new Scene(root);        
    stage.setScene(scene);
    stage.show();

    SampleController controller = (SampleController)loader.getController();

  }

  public static void main(String[] args) {
    launch(args);
  }
}