Сериализация объекта (ArrayList илиObesrvableList) - PullRequest
0 голосов
/ 02 мая 2020

У меня проблема, из-за которой я остался в тупике. Я создал программу инвентаризации в Javafx, используя модель MVC. У меня есть класс инвентаря, класс инвентаря, который расширяет инвентарь. Я получаю данные из текстовых полей и помещаю их в конструктор, который распределяет объекты в arrayList и ObservableList (для вывода в таблицу). Все работает нормально, пока я не попытаюсь сериализовать arrayList. Пожалуйста, помогите, поскольку я новичок и понятия не имею, что является причиной проблемы. Я протестировал пустой ArrayList без каких-либо объектов, и он будет сериализован. Инвентаризация реализуется Сериализовано.

enter code here:

publi c Класс Inventory реализует Serializable {

  private String productCodeS;
     private String description;
    private float price;
    private int quantityOnHand;
    private int quantitySold;
    private int quantityOnOrder;
    private int currentProductInventory;
    private float inventoryProductCost;

    private long serialVersionUID = 1l;
    List<Inventory> getInventoryArrayList = new ArrayList<>();
    List<String> inventoryListSavedToFile = new ArrayList<>();
    ObservableList <Inventory> getInventory = FXCollections.observableArrayList();
    ObservableList <Inventory> getInventory3 = FXCollections.observableArrayList();
    ObservableList <Inventory> getInventory4 = FXCollections.observableArrayList();
    ObservableList <Inventory> getInventory5 = FXCollections.observableArrayList();
    ObservableList <Inventory> getInventory6 = FXCollections.observableArrayList();




    //constructor
    public Inventory(){}

    public Inventory(String productCode, String description, String price, String  quantityOnHand,
                     String  quantitySold, String  quantityOnOrder) {


       // this.productCode = new SimpleStringProperty(productCode);
      //  this.description = new SimpleStringProperty(description);
        this.productCodeS = productCode;
        this.description = description;
        this.price = Float.parseFloat(price);
        this.quantityOnHand = Integer.parseInt(quantityOnHand);
        this.quantitySold = Integer.parseInt(quantitySold) ;
        this.quantityOnOrder = Integer.parseInt( quantityOnOrder);

    this.currentProductInventory =(this.quantityOnHand + this. quantityOnOrder - this.quantitySold);
    this.inventoryProductCost = (this. price*(this.quantityOnHand + this.quantityOnOrder - this.quantitySold));

    }


    public String getProductCode() {
      //  return productCode.get();
        return productCodeS;
    }
    // public void setProductCode(SimpleStringProperty productCode) {
    public void setProductCode(String productCode) {
        this.productCodeS = productCode;
    }

    public String getDescription() {
       return description;
     //   return description.get();
    }
  // public void setDescription(SimpleStringProperty description) {
    public void setDescription(String description) {
        this.description = description;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public int getQuantityOnHand() {
        return quantityOnHand;
    }

    public void setQuantityOnHand(int quantityOnHand) {
        this.quantityOnHand = quantityOnHand;
    }

    public int getQuantitySold() {
        return quantitySold;
    }

    public void setQuantitySold(int quantitySold) {
        this.quantitySold = quantitySold;
    }

    public int getQuantityOnOrder() {
        return quantityOnOrder;
    }

    public void setQuantityOnOrder(int quantityOnOrder) {
        this.quantityOnOrder = quantityOnOrder;
    }

    public int getCurrentProductInventory() {
        return currentProductInventory;
    }

    public void setCurrentProductInventory(int currentProductInventory) {
        this.currentProductInventory = currentProductInventory;
    }

    public float getInventoryProductCost() {
        return inventoryProductCost;
    }

    public void setInventoryProductCost(float inventoryProductCost) {
        this.inventoryProductCost = inventoryProductCost;
    }


    @Override
    public String toString() {
        return "Inventory{" +
                "productCode='" + productCodeS + '\'' +
                ", description='" + description + '\'' +
                ", price=" + price +
                ", quantityOnHand=" + quantityOnHand +
                ", quantitySold=" + quantitySold +
                ", quantityOnOrder=" + quantityOnOrder +
                ", currentProductInventory=" + currentProductInventory +
                ", inventoryProductCost=" + inventoryProductCost +
                '}';
    }
}//class


    enter code here


public class InventoryController extends Inventory{



    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private TableView<Inventory> mainTableVw;

    @FXML
    private TableColumn<Inventory, String> productCodeCol;

    @FXML
    private TableColumn<Inventory, String> descriptionCol;

    @FXML
    private TableColumn<Inventory, String> priceCol;

    @FXML
    private TableColumn<Inventory, String> quantityOnHandCol;

    @FXML
    private TableColumn<Inventory, String> quantitySoldCol;

    @FXML
    private TableColumn<Inventory, String> quantityOnOrderCol;

    @FXML
    private TableColumn<Inventory, String> cpiCol;

    @FXML
    private TableColumn<Inventory, String> ipcCol;


    /////////////////////////////////////////////
    @FXML
    private TableView<Inventory> mainTableVw3;

    @FXML
    private TableColumn<Inventory, String> productCodeCol3;

    @FXML
    private TableColumn<Inventory, String> descriptionCol3;

    @FXML
    private TableColumn<Inventory, String> priceCol3;

    @FXML
    private TableColumn<Inventory, String> quantityOnHandCol3;

    @FXML
    private TableColumn<Inventory, String> quantitySoldCol3;

    @FXML
    private TableColumn<Inventory, String> quantityOnOrderCol3;

    @FXML
    private TableColumn<Inventory, String> cpiCol3;

    @FXML
    private TableColumn<Inventory, String> ipcCol3;

    ///////////////////////////////////////////////
    @FXML
    private TableView<Inventory> mainTableVw4;

    @FXML
    private TableColumn<Inventory, String> productCodeCol4;

    @FXML
    private TableColumn<Inventory, String> descriptionCol4;

    @FXML
    private TableColumn<Inventory, String> priceCol4;

    @FXML
    private TableColumn<Inventory, String> quantityOnHandCol4;

    @FXML
    private TableColumn<Inventory, String> quantitySoldCol4;

    @FXML
    private TableColumn<Inventory, String> quantityOnOrderCol4;

    @FXML
    private TableColumn<Inventory, String> cpiCol4;

    @FXML
    private TableColumn<Inventory, String> ipcCol4;
    ///////////////////////////////////////////////
    @FXML
    private TableView<Inventory> mainTableVw5;

    @FXML
    private TableColumn<Inventory, String> productCodeCol5;

    @FXML
    private TableColumn<Inventory, String> descriptionCol5;

    @FXML
    private TableColumn<Inventory, String> priceCol5;

    @FXML
    private TableColumn<Inventory, String> quantityOnHandCol5;

    @FXML
    private TableColumn<Inventory, String> quantitySoldCol5;

    @FXML
    private TableColumn<Inventory, String> quantityOnOrderCol5;

    @FXML
    private TableColumn<Inventory, String> cpiCol5;

    @FXML
    private TableColumn<Inventory, String> ipcCol5;
    //////////////////////////////////////////////



    @FXML
    private Button addBtn;

    @FXML
    private Button restoreBtn;

    @FXML
    private Button saveBtn;
    @FXML
    private TextField productCodeTxtBx;

    @FXML
    private TextField descriptionTxtBx;

    @FXML
    private TextField priceTxtBx;

    @FXML
    private TextField quantitySoldTxtBx;

    @FXML
    private TextField quantityOnHandTxBx;

    @FXML
    private TextField quantitytOnOrderTxtBx;


    //fxml methods

    @FXML
    void deleteInventory(ActionEvent event) {

    }


    @FXML
    void initialize() {


        ///sets up columns
       productCodeCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("productCode"));
        descriptionCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("description"));
       priceCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("price"));
        quantityOnHandCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnHand"));
        quantitySoldCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantitySold"));
        quantityOnOrderCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnOrder"));
        cpiCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("currentProductInventory"));
        ipcCol.setCellValueFactory(new PropertyValueFactory<Inventory,String>("inventoryProductCost"));
        //////////////////////////////////////////////////////////////////////////////////////////////////////
        productCodeCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("productCode"));
        descriptionCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("description"));
        priceCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("price"));
        quantityOnHandCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnHand"));
        quantitySoldCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantitySold"));
        quantityOnOrderCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnOrder"));
        cpiCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("currentProductInventory"));
        ipcCol3.setCellValueFactory(new PropertyValueFactory<Inventory,String>("inventoryProductCost"));
        ////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        productCodeCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("productCode"));
        descriptionCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("description"));
        priceCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("price"));
        quantityOnHandCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnHand"));
        quantitySoldCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantitySold"));
        quantityOnOrderCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnOrder"));
        cpiCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("currentProductInventory"));
        ipcCol4.setCellValueFactory(new PropertyValueFactory<Inventory,String>("inventoryProductCost"));
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        productCodeCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("productCode"));
        descriptionCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("description"));
        priceCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("price"));
        quantityOnHandCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnHand"));
        quantitySoldCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantitySold"));
        quantityOnOrderCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("quantityOnOrder"));
        cpiCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("currentProductInventory"));
        ipcCol5.setCellValueFactory(new PropertyValueFactory<Inventory,String>("inventoryProductCost"));

        mainTableVw.setItems(getInventory);


    }


    public List<Inventory> addInventory(ActionEvent event){


        Inventory product = new Inventory(productCodeTxtBx.getText(), descriptionTxtBx.getText(),
                priceTxtBx.getText(), quantityOnHandTxBx.getText(),
                quantitySoldTxtBx.getText(), quantitytOnOrderTxtBx.getText());
        System.out.println( product.getDescription() + " " + product.getCurrentProductInventory() + " test1" );


        getInventoryArrayList.add(product);

       // getInventory.add(product);
       // System.out.println(getInventory + "Test7");
        // inventoryListSavedToFile.add(product);
        //System.out.println(inventoryListSavedToFile + "Test8");
         mainTableVw.setItems(getInventory);

        if (product.getCurrentProductInventory() > 50) {
        //   System.out.println( product.getDescription() + " " + product.getCurrentProductInventory() + " test2");
            getInventory3.add(product);
            mainTableVw3.setItems(getInventory3);
        }


        if (product.getCurrentProductInventory() <= 50) {
           // System.out.println( product.getDescription() + " " + product.getCurrentProductInventory() + " test3");
            getInventory4.add(product);
            mainTableVw4.setItems(getInventory4);
        }
        if (product.getInventoryProductCost() > 50) {
          //  System.out.println( product.getDescription() + " " + product.getCurrentProductInventory() + " test4");
            getInventory5.add(product);
            mainTableVw5.setItems(getInventory5);
        }


        return getInventoryArrayList;
    }


    public void saveInventoryToFile(ActionEvent event) throws IOException {
/*
        for (Inventory product: inventoryListSavedToFile){


            System.out.println(product + "test r");
        }*/

        try {
            FileOutputStream fileOut = new FileOutputStream("src/sample/inventory.dat");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(getInventoryArrayList);
            out.close();
            fileOut.close();
            System.out.printf("Serialized data is saved in src/sample/inventory.dat");
        } catch (IOException i) {
            i.printStackTrace();
        }


    }

    public void writeFromFileToArrayList(ActionEvent event){

 /*       try {
            FileInputStream fis = new FileInputStream("src/sample/inventory.dat");
             BufferedInputStream br = new BufferedInputStream(fis);
            ObjectInputStream ois = new ObjectInputStream(fis);

          //  ois.readObject();
        //    ois.close();


            for (Inventory product: inventoryListSavedToFile = (List<Inventory> )ois.readObject()) {


                getInventory6.add(product);
                System.out.println( getInventory6 + "test print Read");


            }

            ois.close();
            System.out.println( getInventory + "test print Read get");
            mainTableVw.setItems(getInventory6);

        }catch (IOException e){
            e.printStackTrace();
            System.out.println("IO EXCEPTION!");

        }catch (ClassNotFoundException e) {
           e.printStackTrace();
          System.out.println("CLASS NOT FOUND EXCEPTION!");
       }*/


    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...