向 class 添加方法时 TableView 内容消失

TableView content disappearing when adding method to a class

我的应用程序的通常行为是这样的:我有一个 class,它既包含自定义对象,也包含创建 ObservableList(和相应的 TableView)的方法,因此它们可以在其他 class是的。这很好用:

但是当我向那个 class 添加一个方法时,那个 是空的 ,并且 甚至没有被使用 , 例如

public static void foo(){
}

..TableView 变成这样:

起初我以为它会以某种方式干扰仅用于保存对象的 class,但后来我意识到我之前添加了其他不相关的方法,但它并没有影响行为。那么这里到底发生了什么?

这是 myobject class(注意 TableView 方法):

public class Proizvod implements Serializable {
String name;
String jedinicamere;
Double cena;
static ObservableList<Proizvod> proizvods;
static TableView izmenaProizvodaTable;

public Proizvod() {
    name = "";
    cena = 0.0;
}


public Proizvod(String name, double cena, String jedinicamere) {
    this.name = name;
    this.cena = cena;
    this.jedinicamere = jedinicamere;
}


public Double getCena() {
    return cena;
}

public void setCena(Double cena) {
    this.cena = cena;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getJedinicamere() {
    return jedinicamere;
}

public void setJedinicamere(String jedinicamere) {
    this.jedinicamere = jedinicamere;
}

public static TableView getTable() {


    proizvods = InputOutput.loadProizvods("proizvods.sav");

    izmenaProizvodaTable = new TableView(proizvods);

    TableColumn<Proizvod, String> nameColumn = new TableColumn<>("Ime");
    nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

    TableColumn<Proizvod, String> cenaColumn = new TableColumn<>("Cena");
    cenaColumn.setCellValueFactory(new PropertyValueFactory<>("cena"));

    TableColumn<Proizvod, String> jedinicaColumn = new TableColumn<>("Jedinica mere");
    jedinicaColumn.setCellValueFactory(new PropertyValueFactory<>("jedinicamere"));

    izmenaProizvodaTable.getColumns().addAll(nameColumn, cenaColumn, jedinicaColumn);
    return izmenaProizvodaTable;
}

public static void newProizvod(Proizvod proizvod) {
    proizvods = InputOutput.loadProizvods("proizvods.sav");
    proizvods.add(proizvod);
    izmenaProizvodaTable.setItems(proizvods);
    InputOutput.saveProizvods(proizvods, "proizvods.sav");
}

public static void deleteProizvod(){
    ObservableList<Proizvod> productSelected, allProducts;
    allProducts = izmenaProizvodaTable.getItems();
    productSelected = izmenaProizvodaTable.getSelectionModel().getSelectedItems();
    productSelected.forEach(allProducts::remove);
    InputOutput.saveProizvods(proizvods, "proizvods.sav");
   }
}

这是实现:

    public static void unosProizvoda() {

    TableView tableView = Proizvod.getTable();
    TextField kolicina = new TextField();
    kolicina.setPromptText("Količina");

    Button dodajProizvod = new Button("Dodaj proizvod");
    dodajProizvod.setOnAction(event -> {

        Proizvod izabranProizvod = (Proizvod) tableView.getSelectionModel().getSelectedItem();
        Main.addToOdredjeniProizvods(new OdredjeniProizvod(Integer.valueOf(kolicina.getText()), izabranProizvod));
        Main.enableFinalizeButton();
    });

    HBox hBox = new HBox(10, kolicina, dodajProizvod);
    hBox.setPadding(new Insets(10,10,10,10));
    VBox vBox = new VBox(tableView, hBox);
    Stage stage = new Stage();
    stage.setScene(new Scene(vBox, 300, 400));
    stage.setTitle("Unos proizvoda");
    stage.initModality(Modality.APPLICATION_MODAL);
    stage.initStyle(StageStyle.UTILITY);
    stage.showAndWait();
}

似乎加载对象时出现问题:只有以前保存的对象具有与当前对象完全相同的方法,才能正确加载对象,例如如果我使用 foo()bar() 保存对象,然后删除 bar(),我将无法加载该对象。同理,如果我再添加一个方法(问题的issue),我又无法加载对象了。

我没有在异常发生时将异常打印出来,所以这可能就是我无法意识到问题出在哪里的原因。故事的重点,总是打印你的异常。