在ObservableList JavaFX中设置Items时的异常

时间:2014-10-09 09:29:05

标签: list javafx observable

每次,当我想设置表的项目时,我声明我收到了一个例外。我不知道自己做错了什么。

错误代码:

    Okt 09, 2014 11:06:10 AM application.Main start
    SCHWERWIEGEND: null
    javafx.fxml.LoadException: 
    /D:/Users/muellerl/workspace/Hydaba/bin/application/table_ui.fxml
    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at application.Main.start(Main.java:17)
    at com.sun.javafx.application.LauncherImpl$8.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$7.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$6.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$300(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$4$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NullPointerException
        at controller.main_controller.initialize(main_controller.java:49)
        ... 20 more

因此,当我删除einheitenTable.setItems(einheitendata);时,我没有收到错误消息。他找到了源​​" table_ui.fxml"。所以我认为这是TableView的一个问题。 这是我写的其他代码。希望你能帮我解决这个问题。第49行中的错误属于main_controller.java。

main.java:

    package application;

import java.util.logging.Level;
import java.util.logging.Logger;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;


public class Main extends Application {
    @Override
    public void start(Stage Stage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource(
                    "/application/table_ui.fxml"));
            Scene scene = new Scene(root);
            Stage.setTitle("Hydaba-Client");
            Stage.setScene(scene);
            Stage.show();
        } catch (Exception e) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e);
        }
    }

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

einheiten_table.java:

package table;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class einheiten_table {

private final SimpleIntegerProperty rBleinr;
private final SimpleStringProperty rEinheit;
private final SimpleStringProperty rLiteeinheit;
private final SimpleStringProperty rEinheitengruppe;
private final SimpleStringProperty rBasiseinheit;
private final SimpleIntegerProperty rUmrechnungsfaktor;

public einheiten_table (int sBleinr, String sEinheit, String sLiteeinheit, String sEinheitengruppe,String sBasiseinheit, int sUmrechnungsfaktor) {
    this.rBleinr = new SimpleIntegerProperty(sBleinr);
    System.out.println(sBleinr);
    this.rEinheit = new SimpleStringProperty(sEinheit);
    System.out.println(sEinheit);
    this.rLiteeinheit = new SimpleStringProperty(sLiteeinheit);
    System.out.println(sLiteeinheit);
    this.rEinheitengruppe = new SimpleStringProperty(sEinheitengruppe);
    System.out.println(sEinheitengruppe);
    this.rBasiseinheit = new SimpleStringProperty(sBasiseinheit);
    System.out.println(sBasiseinheit);
    this.rUmrechnungsfaktor = new SimpleIntegerProperty(sUmrechnungsfaktor);
    System.out.println(sUmrechnungsfaktor);
}

/** rBleinr **/
public Integer get_rBleinr() {
    return rBleinr.get();   
}

public void set_rBleinr(Integer set) {
    rBleinr.set(set);
}

/** rEinheit **/
public String get_rEinheit() {
    return rEinheit.get();
}

public void set_rEinheit(String set) {
    rEinheit.set(set);
}

/** rLiteeinheit **/
public String get_rLiteeinheit() {
    return rLiteeinheit.get();
}

public void set_rLiteeinheit(String set) {
    rLiteeinheit.set(set);
}

/** rEinheitengruppe **/
public String get_rEinheitengruppe() {
    return rEinheitengruppe.get();
}

public void set_rEinheitengruppe(String set) {
    rEinheitengruppe.set(set);
}

/** rBasiseinheit **/
public String get_rBasiseinheit() {
    return rBasiseinheit.get();
}

public void set_rBasiseinheit(String set) {
    rBasiseinheit.set(set);
}

/** rUmrechnungsfaktor **/
public Integer get_rUmrechnungsfaktor() {
    return rUmrechnungsfaktor.get();
}

public void set_rUmrechnungsfaktor(Integer set) {
    rUmrechnungsfaktor.set(set);
}

}

main_controller.java:

    package controller;

    import java.net.URL;
    import java.util.ResourceBundle;

    import table.einheiten_table;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.cell.PropertyValueFactory;

    public class main_controller implements Initializable {

        @FXML
    TableView<einheiten_table> einheitenTable;
    @FXML
    TableColumn<einheiten_table, Integer> Bleinr_col;
    @FXML
    TableColumn<einheiten_table, String> Einheit_col;
    @FXML
    TableColumn<einheiten_table, String> Liteeinheit_col;
    @FXML
    TableColumn<einheiten_table, String> Einheitengruppe_col;
    @FXML
    TableColumn<einheiten_table, String> Basiseinheit_col;
    @FXML
    TableColumn<einheiten_table, Integer> Umrechnungsfaktor_col;

    final ObservableList<einheiten_table> einheitendata = FXCollections.observableArrayList(
            new einheiten_table(9, "Stelle 1", "Stelle 2", "Stelle 3", "Stelle 4", 10)
            );

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Bleinr_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, Integer>("rBleinr"));
        Einheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rEinheit"));
        Liteeinheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rLiteeinheit"));
        Einheitengruppe_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rEinheitengruppe"));
        Basiseinheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rBasiseinheit"));
        Umrechnungsfaktor_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, Integer>("rUmrechnungsfaktor"));
//      System.out.println(einheitendata.size());
        einheitenTable.setItems(einheitendata);
    }


}

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是TableView的名称在FXML文件和Controller类中不匹配。目前您已将其定义为

@FXML
TableView<einheiten_table> einheitenTable;

再次我猜它应该是

@FXML
private TableView<einheiten_table> Einheiten_table;

根据您的命名方法:)
请检查FXML文件中的fx:id