/**
* Cities class contains the main method to run the program. It uses a directed
* graph to store the names of and distances between cities.
*/
import java.io.*;
import java.io.InputStreamReader;
import java.util.*;
public class Cities implements Serializable
{
public static void main(String[] args) {
CityGraph graph=new CityGraph();
try {
FileInputStream file = new FileInputStream("graph.obj");
ObjectInputStream inStream = new ObjectInputStream(file);
graph = (CityGraph) (inStream.readObject());
}
catch (FileNotFoundException e) {
}
catch (Exception e) { e.printStackTrace(); } char choice = 'q';
try {
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(instream);
do {
System.out.println("\nPlease choose from following options");
System.out.println("I. Insert a new city");
System.out.println("P. Add a new path");
System.out.println("L. List all paths leaving a city");
System.out.println("E. Check if direct path exists");
System.out.println("F. Find the shortest path");
System.out.println("Q. Quit the program");
System.out.print("\nOption: ");
choice = stdin.readLine().trim().charAt(0);
if (choice == 'i' || choice == 'I') {
try {
graph.insert();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if (choice == 'p' || choice == 'P') {
try {
graph.addPath();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if (choice == 'l' || choice == 'L') {
try {
graph.pathFromCity();
}
catch (error e) {
System.out.println(e.getMessage());
}
} else if (choice == 'e' || choice == 'E') {
try {
graph.ifPathExist();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if(choice=='f' || choice=='F')
{graph.FindShorest(); } else if (choice == 'q' || choice == 'Q') {
try {
FileOutputStream out = new FileOutputStream("graph.obj");
ObjectOutputStream outStream = new ObjectOutputStream(out);
outStream.writeObject(graph);
outStream.flush();
System.out.println("graph object saved as graph.obj.");
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("Thank you for using the program. Good-Bye.");
}
else {
System.out.println("Invalid choice. Try again.");
}
}
while (choice != 'q' && choice != 'Q');
}
catch (Exception e) {
e.printStackTrace();
} }}--------------------------------------------------------------------------------
/**self-defined exception class to handle exception
*/
import java.util.*;
import java.io.*;
public class error extends Exception implements Serializable {
public error() {
super("Error: The graph is full."); }
public error(String s)
{super(s);
}
}
请问为什么program一调用readOjbect() 和 writeObject(---)就有问题
我的每个class已经都implements Serializable了
它还说
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.io.InputStreamReader
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1278)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
at Cities.main(Cities.java:15)
Caused by: java.io.NotSerializableException: java.io.InputStreamReader
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at Cities.main(Cities.java:77)
高手帮帮忙,,谢谢~~~code有点长,谢了
* Cities class contains the main method to run the program. It uses a directed
* graph to store the names of and distances between cities.
*/
import java.io.*;
import java.io.InputStreamReader;
import java.util.*;
public class Cities implements Serializable
{
public static void main(String[] args) {
CityGraph graph=new CityGraph();
try {
FileInputStream file = new FileInputStream("graph.obj");
ObjectInputStream inStream = new ObjectInputStream(file);
graph = (CityGraph) (inStream.readObject());
}
catch (FileNotFoundException e) {
}
catch (Exception e) { e.printStackTrace(); } char choice = 'q';
try {
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(instream);
do {
System.out.println("\nPlease choose from following options");
System.out.println("I. Insert a new city");
System.out.println("P. Add a new path");
System.out.println("L. List all paths leaving a city");
System.out.println("E. Check if direct path exists");
System.out.println("F. Find the shortest path");
System.out.println("Q. Quit the program");
System.out.print("\nOption: ");
choice = stdin.readLine().trim().charAt(0);
if (choice == 'i' || choice == 'I') {
try {
graph.insert();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if (choice == 'p' || choice == 'P') {
try {
graph.addPath();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if (choice == 'l' || choice == 'L') {
try {
graph.pathFromCity();
}
catch (error e) {
System.out.println(e.getMessage());
}
} else if (choice == 'e' || choice == 'E') {
try {
graph.ifPathExist();
}
catch (error e) {
System.out.println(e.getMessage());
}
}
else if(choice=='f' || choice=='F')
{graph.FindShorest(); } else if (choice == 'q' || choice == 'Q') {
try {
FileOutputStream out = new FileOutputStream("graph.obj");
ObjectOutputStream outStream = new ObjectOutputStream(out);
outStream.writeObject(graph);
outStream.flush();
System.out.println("graph object saved as graph.obj.");
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("Thank you for using the program. Good-Bye.");
}
else {
System.out.println("Invalid choice. Try again.");
}
}
while (choice != 'q' && choice != 'Q');
}
catch (Exception e) {
e.printStackTrace();
} }}--------------------------------------------------------------------------------
/**self-defined exception class to handle exception
*/
import java.util.*;
import java.io.*;
public class error extends Exception implements Serializable {
public error() {
super("Error: The graph is full."); }
public error(String s)
{super(s);
}
}
请问为什么program一调用readOjbect() 和 writeObject(---)就有问题
我的每个class已经都implements Serializable了
它还说
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.io.InputStreamReader
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1278)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
at Cities.main(Cities.java:15)
Caused by: java.io.NotSerializableException: java.io.InputStreamReader
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at Cities.main(Cities.java:77)
高手帮帮忙,,谢谢~~~code有点长,谢了
try
{
FileOutputStream fout = new FileOutputStream(fileName);
ObjectOutputStream oout=new ObjectOutputStream(fout);
oout.writeObject(list);
fout.close();
}
catch(Exception e)
{
e.printStackTrace();
}
读序列化数据try
{
FileInputStream fin=new FileInputStream(fileName);
ObjectInputStream oin=new ObjectInputStream(fin);
Object obj=oin.readObject();
link=(LinkedList)obj;
}
catch(Exception e)
{
e.printStackTrace();
}
java.io.NotSerializableException: java.io.InputStreamReader
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at Cities.main(Cities.java:77)
到底问题在哪里???
把CityGraph class 中的
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(instream);
改为
private static InputStreamReader instream = new InputStreamReader(System.in);
private static BufferedReader stdin = new BufferedReader(instream);具体为什么,我也不清楚。。可能因为static InputStreamReader,BufferedReader就不用save他们的reference吧