2016-01-13 48 views
0

我想不通爲什麼我不類序列化。正如你可以在我的代碼中看到的,我的類實現了Serializable接口。不序列化的Java

public class Firm { 

PrintWriter out = new PrintWriter(System.out, true); 
Scanner sc = new Scanner(System.in); 

Set<Worker> workers = new HashSet<>(); 

boolean saveToFile(){ 
    String fileName = "text.txt"; 
    ObjectOutputStream file; 
    boolean save = false; 
    try{ 
     file = new ObjectOutputStream(new FileOutputStream(fileName)); 
     file.writeObject(workers); 
     file.close(); 
     save = true; 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
    return save; 
} 
} 

import java.io.Serializable; 

public abstract class Worker implements Serializable {//Code 

任何想法如何解決呢?

+1

你得到了什麼樣的錯誤?以及擴展和使用你的「Pracownik」類的代碼部分在哪裏? – solar

+0

我不是英語,所以我在發佈時編輯我的代碼。現在它是工人類。 java.io.NotSerializableException:java.util.Scanner中 \t在java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) \t在java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 等上。 –

+0

您應該在您的問題中發佈錯誤信息,而不是評論。此外,我不能與你現有的代碼示例重現您的問題,所以請張貼適當[SSCCE(http://sscce.org)/ [MCVE](http://stackoverflow.com/help/mcve)。 – Pshemo

回答

2

的問題是,所述PrintWriterScanner不能序列化;你不能像這樣序列化I/O連接。無論你正在使用它們,

搬完,如果你需要他們所有的,因爲局部變量。不要將它們存儲在課堂上。

0

您應該放心,Worker類中的所有字段也都具有實現Serializable接口的類型。

根據您的評論中您的類名稱和堆棧跟蹤片段,很可能您的字段類型爲Firm,因爲Worker類由於其結構而不可序列化。

所以,你需要做的是最低兩兩件事:

1)Firm類也必須實現Serializable接口

2)標誌Scanner字段transient