【发布时间】:2019-08-01 07:00:39
【问题描述】:
我理解整个概念,但是在处理 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,我确保 Test 类确实实现了 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”是我的项目名称,草图有这个名称,这个项目中只有两个文件,它的草图不允许我实现 Serializable 和“Test”类,现在,当错误提到 testerino 时,让我问为什么它首先尝试序列化。 - 经过太多的研究和测试,我想出了代码是完美的想法,但是除了整数、字符串甚至 ArrayLists 等普通变量之外,处理不能序列化对象,这当然使我之前的问题过时了,除非有人设法找到一种在处理 3.5.3 Java 上序列化对象的方法
结论 除非有人想出一种方法来序列化处理中的对象,否则我无法为我的项目做太多事情,我将限制自己在处理中存储正常变量,我已经研究了一天半以上的主题并征求意见我的 Uni Lecturer,他似乎和我在同一页上,尽管他是 Processing 的新手。 这篇文章的一个很好的答案可能是如果有人找到了问题的解决方案,或者什么时候可以声明处理不序列化对象而只序列化变量。 谢谢你的时间。 AZ
最终编辑: 超过这一点可能很难找到解决方案,但问题是序列化仅适用于 .java 类文件,处理使用 .pde 类格式,将文件格式转换为 .java 有助于序列化过程。
【问题讨论】:
-
请发布整个堆栈跟踪
-
什么意思?这段代码只是我做的一个测试,如果我不能序列化 Test 类,我怎么能让它序列化?编辑:你的意思是代码似乎不可编译?如果很抱歉让您感到困惑,但 Processing 会像这样编译代码
-
您是在处理编辑器中工作吗?您的
Test课程是否在新标签中?testerino来自哪里?我在您发布的代码中没有看到任何地方。 -
这里不是
Test类不是Serializable。阅读错误信息。 -
我为我的措辞道歉,“testerino”是整个项目的名称,主草图中没有具有该名称的类,这将是带有 try/catch 的代码块跨度>
标签: java processing objectoutputstream