我在解决一个 notSeriazable 问题时遇到了问题,我所有的类都实现了 seriazable,但它总是给我一个关于它的错误。
java.io.NotSerializableException: java.util.Scanner
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Assign3.main(Assign3.java:119)
Scanner 是一个类,我没有意义。我认为 Scanner 也应该序列化?但我不能碰 Scanner 类。
Bank b = new Bank(100.0);
try{
ObjectOutputStream save = new ObjectOutputStream(new FileOutputStream("try.txt"));
save.writeObject(b);
save.close();
}catch(Exception ex){ex.printStackTrace();}
import java.io.Serializable;
import java.util.Scanner;
public class Bank implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int Maxtransaction = 1000;
public Transaction[] transactions = new Transaction[Maxtransaction];
private int numTransactions = 0;
private double balance;
Scanner sn = new Scanner(System.in);
public Bank()
{
}
public Bank(double balance)
{
this.balance = balance;
}
public double getBalance()
{
return balance;
}
public void display()
{
System.out.print("\nTRANSACTION RECORD:\n");
for(int i = 0; i<numTransactions;i++)
{
System.out.print(transactions[i].toString()+"\n");
}
System.out.print("BALANCE : $"+getBalance()+"\n");
}
public boolean addTransaction(Category categories)
{
if(numTransactions>Maxtransaction){return false;}
else{
String[] chooseaccountletter = {"c","d"};
String chooseaccount;
boolean erroraccount = true;
System.out.print("\n");
do{
System.out.print("Enter a c for credit or d for debit: ");
chooseaccount = sn.nextLine();
for(int i = 0 ; i<chooseaccountletter.length;i++)
{
if(chooseaccountletter[i].equals(chooseaccount))
{
erroraccount = false;
break;
}
}
}while(erroraccount);
if(chooseaccountletter[0].equals(chooseaccount))
{
Transaction credit = new CreditTransaction();
credit.getTransactionInfo(categories);
credit.getAmout();
balance += credit.getAmout();
transactions[numTransactions] = credit;
}//end credit
if(chooseaccountletter[1].equals(chooseaccount))
{
Transaction debit = new DebitTransaction();
debit.getTransactionInfo(categories);
debit.getAmout();
balance += debit.getAmout();
transactions[numTransactions] = debit;
}//end debit
numTransactions++;
return true;
}
}
public void displayCategory(String Category)
{
double total = 0;
System.out.print("\nTransactions for Category "+Category+" :\n");
for(int i = 0; i<numTransactions;i++){
if(transactions[i].getCategory() == Category)
{
System.out.print(transactions[i].toString()+"\n");
total += transactions[i].getAmout();
}
}
System.out.print("Category Balance : $"+total+"\n");
}
}
最佳答案
没有Scanner
没有实现 Serializable
,因此如果您的 Bank
类包含一个 Scanner
对象,它也不会是可序列化的。您必须删除 Scanner
或将其标记为 transient
或 static
以便 Bank
对象可序列化。 (请注意,将扫描器标记为静态会使它属于该类,而不是 Bank
的单个实例。您最好将其设为 transient 。)
关于java - Java 扫描器上的 NotSerializableException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799541/