JavaFX TableView/Column 空指针异常

JavaFX TableView/Column Null pointer exception

我在尝试启动 Table 填充时遇到空指针问题。 我有来自 class 的名为 Komponenta 的对象,我将其数据放入 ObservableList,然后尝试在 TableView 中显示它。这次我尝试使用多个 fxml 屏幕,但出于某种原因,它不能使用超过 1 个 .fxmltest 是我在 main.fxml 上按下按钮时调用的方法,因此它会加载一个新按钮。

MainController.java

public ObservableList<Komponenta> komponente = FXCollections.observableArrayList(new Komponenta("Neki Tip", "Neki Proizvodac","Neki opis", 5));
@FXML
private TableView<Komponenta> Tablica;
@FXML
private TableColumn<Komponenta,String> Tip;
@FXML
private TableColumn<Komponenta,String> Proizvodac;
@FXML
private TableColumn<Komponenta,String> Karakteristika;
@FXML
private TableColumn<Komponenta,Integer> Komada;
@FXML
private void test(ActionEvent event) throws IOException{
    Node node=(Node) event.getSource();
    Stage stage = (Stage) node.getScene().getWindow();
    Parent root = (Pane)FXMLLoader.load(getClass().getResource("ElKomponenta.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();       
}
@FXML
private void initialize() throws Exception  {
    System.out.println(komponente.get(0).getKomada());
    Tip.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("tip"));
    Proizvodac.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("proizvodac"));
    Karakteristika.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("karakteristika"));
    Komada.setCellValueFactory(new PropertyValueFactory<Komponenta, Integer>("komada"));
    Tablica.setItems(komponente);
}

ElKomponenta.fxml

<TableView fx:id="Tablica" prefHeight="603.0" prefWidth="889.0">
  <columns>
    <TableColumn fx:id="Tip" prefWidth="177.0" text="Tip" />
    <TableColumn fx:id="Proizvodac" minWidth="0.0" prefWidth="207.0" text="Proizvođač" />
      <TableColumn fx:id="Karakteristika" prefWidth="326.0" text="Karakteristike" />
      <TableColumn fx:id="Komada" minWidth="0.0" prefWidth="178.0" text="Komada" />
  </columns>
</TableView>

错误:

Caused by: java.lang.NullPointerException
at application.MainController.initialize(MainController.java:62)
... 27 more

第一个开始的行是setCellValueFactory

另外,如果需要,Komponenta.java

public class Komponenta {

    private String proizvodac;
    private String tip;
    private String karakteristika;
    private Integer komada;

    public Komponenta(String a, String b, String c, Integer d){
        this.tip = a;
        this.proizvodac = b;
        this.karakteristika = c;
        this.komada = d;
    }

    public String getProizvodac() {
        return proizvodac;
    }

    public void setProizvodac(String proizvodac) {
        this.proizvodac = proizvodac;
    }

    public String getTip() {
        return tip;
    }

    public void setTip(String tip) {
        this.tip = tip;
    }

    public String getKarakteristika() {
        return karakteristika;
    }

    public void setKarakteristika(String karakteristika) {
        this.karakteristika = karakteristika;
    }

    public Integer getKomada() {
        return komada;
    }

    public void setKomada(Integer komada) {
        this.komada = komada;
    }

}

main.fxml 似乎不包含 TableColumnfx:id Tip,但似乎使用相同的控制器 class。由于 initialize 的末尾被调用 调用使用控制器实例的 FXMLLoader.load 方法,加载 main.fxml 导致 NullPointerException.

对两个 fxml 使用不同的控制器 class:main.fxml 的控制器应包含按钮操作处理程序,ElKomponenta.fxml 的控制器应包含TableView 相关内容。