关于Processing的Java序列化

问题描述 投票:-3回答:1

我理解整个概念,但是在Processing 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
  }
}

而Test类是

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的文件,这是帖子上的第一个代码块,我想说的是没有main方法,它使用的方法叫做“setup()”“draw()”只是设置主代码和一个常量循环来动画 - “testerino”是我的项目名称,草图有这个名字,这个项目中只有两个文件及其草图不允许我实现Serializable和“Test”类,现在,当错误提到testerino时,让我问为什么它首先尝试序列化。 - 经过太多的研究和测试,我想出了代码是完美的想法,但是处理不能将对象除了正常变量(如整数,字符串甚至是ArrayLists)之外的序列化,这当然会使我之前的问题过时,除非有人设法找到一种方法来处理处理3.5.3 Java上的对象

结论除非有人想出一种方法来序列化处理中的对象我不能为我的项目做很多事情,我将限制自己将正常变量存储在处理中,我已经研究了超过一天半的主题并征求建议和我的Uni Lecturer一起,他似乎与我在同一页上,尽管他是Processing的新手。这篇文章的一个很好的答案可能是,如果有人找到问题的解决方案,或者什么时候可以声明Processing不是序列化对象而只是序列化变量。谢谢你的时间。 AZ

最终编辑:高于这一点可能很难找到解决方案,但问题是Serialization只适用于.java类文件,Processing使用.pde类格式,将文件格式改为.java帮助序列化过程。

java processing objectoutputstream
1个回答
0
投票

Test类放在它自己的选项卡中(如果您还没有)并且(重新)将此选项卡命名为name.java。

© www.soinside.com 2019 - 2024. All rights reserved.