我已经搜索了这个问题好几天了,但找不到解决方案。我有一个 MainController,它应该包含一个 ArrayList。当我启动应用程序时,应该在initialize()
MainController 的方法中初始化子控制器。它确实有效,但是如果我尝试从 SubController 中的另一个方法引用 MainController 中的 ArrayList,我总是会得到一个NullPointerExeption
,但我不知道为什么。这是我的代码。
控制器.java:
public class Controller {
public ArrayList<Film> filme = new ArrayList<Film>();
@FXML Controller1 controller1 = new Controller1();
...
@FXML
public void initialize() {
...
controller1.init(this);
...
}
...
}
拉赫门.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/8" fx:controller="GUI.Controller"
fx:id="test">
<!-- TODO Add Nodes -->
<fx:include fx:id="tab1" source="StartBildschirm.fxml" />
</AnchorPane>
控制器1.java:
public class Controller1 {
private Controller main;
@FXML private Pane film1;
public void init(Controller controller) {
main = controller;
System.out.println(main.filme.get(0).getTitel());
}
@FXML
public void test(MouseEvent e) {
System.out.println(main.filme.get(0).getTitel());
}
...
}
StartBildschirm.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefWidth="1040.0" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="GUI.Controller1">
...
</AnchorPane>
第一个Syso
工作得很好,给了我正确的值,但正如我所说,第二个总是有NullPointerExeption
. 有没有人知道如何修复它?