我理解整个概念,但是在处理3.5.3时尝试它并不能使它工作,我觉得我遗漏了一些东西,但是经过几个小时的串行化搜索,我得到了这段代码。
import java.io.*;
import java.util.*;
void setup() {
Test test = new Test("Pedro", "1337");
String fileName = "test.bin";
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(fileName));
o.writeObject(test);
o.close();
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
catch (IOException e) {
System.out.println("Error initializing stream");
e.printStackTrace();
}
try {
ObjectInputStream oi = new ObjectInputStream(new FileInputStream(fileName));
System.out.println(oi.readObject());
oi.close();
}
catch (FileNotFoundException e) {
System.out.println("File not found");
}
catch (IOException e) {
System.out.println("Error initializing stream");
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
}
}
测试班是
import java.io.Serializable;
class Test implements Serializable {
String name;
String studentId;
Test (String n, String s) {
name = n;
studentId = s;
}
}
问题似乎出在setup函数的“o.writeobject(test)”行上,错误是java.io.notSerializableException,在该异常中,我确保测试类确实实现了Serializable,甚至出现了相同的错误,这似乎是唯一的问题。
有什么帮助吗?
编辑:
这就是结果
Error initializing stream
java.io.NotSerializableException: testerino
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 testerino.setup(testerino.java:33)
at processing.core.PApplet.handleDraw(PApplet.java:2425)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
Error initializing stream
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: testerino
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1577)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at testerino.setup(testerino.java:47)
at processing.core.PApplet.handleDraw(PApplet.java:2425)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
Caused by: java.io.NotSerializableException: testerino
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 testerino.setup(testerino.java:33)
... 3 more
编辑2:
我不得不说错误消息是“java.io.notserializableException:testerino”,但是“testerino”是处理草图的项目名称,所以我的新问题是为什么它要尝试序列化整个项目草图?
编辑3:
我希望这是我最后一次通过添加此文本进行编辑,所以让我解释几个问题:
-我使用的是processing 3.5.3,这是我在文章开头指出的
-这个ide是为动画制作的,意思是,主“类”不存在,意思是它使用一个叫做sketch的文件,这是文章中的第一个代码块,我想说的是没有主方法,它使用的方法叫做“setup()”“draw()”只是设置主代码和一个常量循环以设置动画
-“testerino”是我的项目名称,草图有这个名称,这个项目中只有两个文件,它的草图不允许我实现序列化和“test”类,现在,当错误提到testerino时,让我问一下为什么它首先要尝试序列化。
-经过太多的研究和测试,我认为代码是完美的,但是处理不能序列化除整数、字符串甚至arraylists等常规变量之外的对象,这当然使我以前的问题过时了,除非有人设法找到一种方法处理3.5.3Java的对象
结论
除非有人想办法在处理过程中序列化对象,否则我无法为我的项目做太多的工作,我只能在处理过程中存储常规变量,我已经研究了一天半以上这个主题,并向我的uni讲师征求了意见,他似乎在和我是同一页,虽然他是新来处理的。
这篇文章的一个很好的答案可能是,如果有人找到了问题的解决方案,或者什么时候可以声明处理不是序列化对象,而是只序列化变量。
谢谢你的时间。
阿兹
最后编辑:
在这一点之上的每一个问题都可能是一个寻找解决方案的斗争,然而问题是序列化只适用于.java类文件,处理使用.PDE类格式,将文件格式压缩到.java帮助序列化过程。