Tôi chưa bao giờ sử dụng Serialization trước đó. Tôi nghĩ rằng tôi có tất cả các quyền trừ phần cuối cùng trong trường hợp "Q" của tôi.Nối tiếp một HashTable, Java
public class Test{
public static void main(String args[]){
Store store = new Store();
FileOutputStream fos;
ObjectOutputStream oos = null;
try{
fos = new FileOutputStream(new File("table.obj"));
oos = new ObjectOutputStream(fos);
}catch(IOException e1){
e1.printStackTrace();
}
này tiếp tục chứa một loạt các mã khác nhưng những gì tôi nghĩ là thực sự quan trọng là "Q" của tôi trường hợp ...
case "Q":
System.out.println("Good-Bye!");
try{
oos.writeObject(store);
oos.flush();
oos.close();
}catch(IOException e){
e.printStackTrace();
}
System.exit(0);
break;
Khi tôi cố gắng để lưu tất cả các dữ liệu của tôi obj file và đóng suối và thoát khỏi chương trình của tôi, tôi nhận được tất cả các lỗi này ...
java.io.NotSerializableException: Item tại java.io.ObjectOutputStream.writeObject0 (Unknown Source) tại java.io. ObjectOutputStream.wri teObject (Nguồn không rõ) tại java.util.Hashtable.writeObject (Nguồn không xác định) tại sun.reflect.NativeMethodAccessorImpl.invoke0 (Phương pháp gốc) tại sun.reflect.NativeMethodAccessorImpl.invoke (Nguồn không xác định) lúc sun.reflect. DelegatingMethodAccessorImpl.invoke (Unknown Source) tại java.lang.reflect.Method.invoke (Unknown Source) tại java.io.ObjectStreamClass.invokeWriteObject (Unknown Source) tại java.io.ObjectOutputStream.writeSerialData (Unknown Source) tại java.io.ObjectOutputStream.writeOrdinaryObject (Nguồn không xác định) tại java.io.ObjectOutputStream.writeObject0 (Nguồn không xác định) tại java.io.ObjectOutputStream.defaultWriteFields (Nguồn không xác định) tại java.io.ObjectOutputStream.writeSerialData (Nguồn không xác định) tại java.io.ObjectOutputStream.writeOrdinaryObject (Nguồn không xác định) tại java.io.ObjectOutputStream.writeObject0 (Unknown Source) tại java.io.ObjectOutputStream.writeObject (Unknown Source) tại Test.main (Test.java:143)
Tôi không chắc chắn hầu hết các lỗi này có nghĩa là gì hoặc tại sao tôi nhận được chúng hoặc thậm chí cách khắc phục chúng. Ai giúp tôi với?
EDIT: CỬA HÀNG CLASS
import java.io.Serializable;
import java.util.Hashtable;
public class Store implements Serializable{
Hashtable<String, Item> stockedItems = new Hashtable<String, Item>();
public boolean addItem(String code){
if(stockedItems.containsKey(code)){
stockedItems.get(code).incrementQuantity();
return true;
}
return false;
}
public boolean removeItem(String code){
if(stockedItems.containsKey(code)){
stockedItems.get(code).decrementQuantity();
return true;
}
return false;
}
public boolean findItem(String code){
if(stockedItems.containsKey(code)){
return true;
}
return false;
}
}
** HashTable My nắm giữ các đối tượng mục mà không thực hiện Serializable. Mà bây giờ tôi đã sửa. Chương trình chạy và trường hợp Q hoạt động tốt! Bây giờ nó là U trường hợp của tôi mà không làm việc và ở đây nó là ...
case "U":
try{
FileInputStream fis = new FileInputStream("table.obj");
ObjectInputStream ois = new ObjectInputStream(fis);
store = (Store)ois.readObject();
ois.close();
}catch(IOException | ClassNotFoundException e){
e.printStackTrace();
}
break;
Mục đích của trường hợp này là cho phép người dùng chọn hay không mà họ muốn sử dụng các dữ liệu lưu trữ trong .obj của tôi tập tin hay không. Tôi nhận được các lỗi khi cố gắng sử dụng trường hợp đó
tại java.io.ObjectInputStream $ BlockDataInputStream.peekByte (Unknown Source) tại java.io.ObjectInputStream.readObject0 (Unknown Source) tại java.io.ObjectInputStream. readObject (Unknown Source) tại Test.main (Test.java:142)
Bạn có thể đăng lớp Store không? Tôi đoán là nó không được đánh dấu là serializable hoặc một cái gì đó bên trong không phải là serializable. – hd1
Các đối tượng mà bạn đang cố gắng lưu trữ, có thể tuần tự hóa? –
'NotSerializableException' có nghĩa là bạn đang cố gắng serialize một cái gì đó mà không phải là serializable. Hiển thị lớp 'Store' của bạn ... – jlordo