У меня проблема, из-за которой я остался в тупике. Я создал программу инвентаризации в 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!");
}*/
}
}