Я хочу сохранить некоторые объекты в файл. но я получил java.io.NotSerializableException
.
Это полный журнал исключений:
java.io.NotSerializableException: main
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at main$FileOperator.<init>(main.java:484)
at main.keyPressed(main.java:79)
at processing.core.PApplet.keyPressed(PApplet.java:3056)
at processing.core.PApplet.handleKeyEvent(PApplet.java:2931)
at processing.core.PApplet.dequeueEvents(PApplet.java:2602)
at processing.core.PApplet.handleDraw(PApplet.java:2440)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1557)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
И я думаю, что из at main.keyPressed(main.java:79)
проблема в основном в строке 79, поэтому:
void keyPressed() {
if((key == 'F') || (key == 'f')){
println("Save shapes into file"); // Save shapes into file
value = 6;
fileIo = new FileOperator(0,shapes);
}
if(key == CODED){
//circle to ellipse
if((keyCode == CONTROL) && (c.centerIsSet)){
c.isItAnEllipse = false;
c.setCircleRadius(sqrt((mouseX+c.x)^2+(mouseY+c.y)^2));
shapes.add(c);
c = new Circle();
System.out.println(" Circle saved\n");
}
//Save a polygon if it is a polygon
else if((keyCode == CONTROL) && (p.savable())){
p = new Polygon();
System.out.println(" Polygon finished\n");
}
//End a polygon if it isn't a polygon yet
else if((keyCode == CONTROL) && (p.savable())){ //here is the row 79
p = new Polygon();
System.out.println(" Polygon cacelled\n");
}
//End a Catmull Rom
else if(keyCode == CONTROL){
cr = new CatmullRomManager();
System.out.println(" CatmullRom spline saved\n");
}
}
}
И у меня есть некоторый класс, например abstract class Shape implements Serializable
и class Line extends Shape
и некоторые другие, которые расширяют class Shape
.
Я пытаюсь сохранить объекты в файл следующим образом:
import java.io.*;
import java.util.Random;
class FileOperator{
FileOperator(int io, ArrayList<Shape> shapes){
if(io == 0){
try{
Random rand = new Random();
rand.nextInt(40);
String filename = "draw" + rand + ".txt";
FileOutputStream f = new FileOutputStream(new File(filename));
ObjectOutputStream o = new ObjectOutputStream(f);
for(Shape s:shapes){
o.writeObject(s);
}
o.close();
f.close();
} catch (FileNotFoundException e) {
System.out.println("ERROR: File not found");
} catch (NotSerializableException e) {
println("ERROR: trying to serialize: ");
e.printStackTrace();
} catch (IOException e) {
println("ERROR: initializing stream");
e.printStackTrace();
}
}else{
//read
}
}
}
Так что я не знаю, но мне интересно, должен ли я как-то сериализовать keyPressed
?
Или как мне разрешить это исключение?