JavaFX TableView / Column Null指针异常

时间:2016-07-31 11:59:08

标签: java javafx nullpointerexception tableview scenebuilder

尝试启动Table填充时,我遇到Null指针问题。 我有一个名为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;
    }

}

1 个答案:

答案 0 :(得分:1)

main.fxml似乎不包含TableColumn fx:id Tip,但似乎使用相同的控制器类。由于initialize在使用控制器实例的FXMLLoader.load方法的每次调用结束时调用,因此加载main.fxml会导致NullPointerException

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