How does FXMLLoader load the FXML's controller?

前端 未结 2 1798
长情又很酷
长情又很酷 2021-01-12 11:14

What happens when I call FXMLLoader#load() in JavaFX?

Suppose the FXML controller extends a class that has a constructor. Will there be assurance that the construct

相关标签:
2条回答
  • 2021-01-12 11:41

    To answer your question "what does a FXMLLoader do exactly when building a controller?":

    first it will try to get a controller instance:

    • if there is already a controller instance set on the FXMLLoader, it will use this instance.
    • if there is no controller factory set on the FXMLLoader, it tries to call a zero-argument-constructor of the class per reflection. If this fails, an InstantiationException is thrown.
    • if there is a controller factory set, it will call this factory to create a new controller instance.

    after getting the controller instance, it will do the following with it:

    • if this class implements Initializable, it calls public void initialize(URL url, ResourceBundle resourceBundle). If not, it looks if there is a method called initialize with zero arguments and calls it via reflection. If not, it does nothing.
    0 讨论(0)
  • 2021-01-12 11:53

    I'm not entirely sure what you are trying to do but normally the controller should not extend a textfield.

    That aside, this is basic java stuff: textfield has an empty constructor, your controller has none so java will (by default) call the empty constructor available in TextField. The TextField constructor will by default (even if it's not in the code) call the constructor of the class it extends and so on. There is no way to construct an object in java without a constructor being called.

    0 讨论(0)
提交回复
热议问题