错误:
java.lang.ClassNotFoundException:testprocedure.tp$3在java.net.URLClassLoader$1上运行(未知源)在java.net.URLClassLoader上运行(未知源)在java.security.accessController.doprivileged(本机方法)在java.net.URLClassLoader.findClass(未知源)在java.lang.ClassLoader.LoadClass(未知源)在sun.misc.launcher上运行(未知源)在java.lang.ClassLoader.LoadClass(未知源)e)在java.io.ObjectInputStream.ReadObject0(未知源)在java.io.ObjectInputStream.ReadObject(未知源)在Core.ProceduResetup.Load(ProceduResetup.java:57)在Core.Engine.Main(Engine.java:25)
我实例化了该对象,并从类“TP”中调用“ProceduResetUp”的“Save”方法。
ProcedureSetup ps=new ProcedureSetup(new Procedure(){ public void doStuff(){ System.out.println("Stuff is being done"); }});
ps.save();
然而,我从不同的程序集合加载,这些程序包含所有必需的代码,但不包含“tp”。
ProcedureSetup ps=new ProcedureSetup();
ps.load();
类内的对象保存和加载:
public void load(){
String path=Operator.persistentGetFile();//gets the file path
ObjectInputStream ois=null;
FileInputStream fin=null;
ProcedureSetup temp=null;
try {
fin = new FileInputStream(path);
ois = new ObjectInputStream(fin);
temp=(ProcedureSetup) ois.readObject();
ois.close();
fin.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if(ois!=null){
try {
ois.close();
} catch (IOException e) {}
}
if(fin!=null){
try {
fin.close();
} catch (IOException e) {}
}
if(temp!=null){
a=temp.a;
}else{
load();//If a load is failed, restart process.
}
}
public void save(){
String path=Operator.persistentGetDirectory();//get directory to save to
String input = JOptionPane.showInputDialog(this, "Enter the File name:");
ObjectOutputStream oos=null;
FileOutputStream fon=null;
try {
fon = new FileOutputStream(path+input+".obj");
oos = new ObjectOutputStream(fon);
try {
oos.writeObject(this);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
oos.close();
fon.close();
} catch (IOException e) {
e.printStackTrace();
}
if(oos!=null){
try {
oos.close();
} catch (IOException e) {}
}
if(fon!=null){
try {
fon.close();
} catch (IOException e) {}
}
}
我的问题是:
为什么会出现这些错误?
为什么(如果需要的话)我需要在我的类路径中有“TP”?
如果真的有一种方法可以将对象保存在其当前状态,而不需要在类路径中使用“tp”,那么我该如何去做呢?(链接会很可爱)
当你读入一个序列化的对象时,Java通过使用序列化流中的信息来“重建”它,构建对象的活副本。除非它具有对象的类的.class
文件,否则它不能这样做;它需要一个空白副本来“填写”来自流的信息。
最好的选择通常是确保类在类路径上。如果你有一些特殊的原因为什么这不起作用,Java连载不适合你;JSON可能是一个合适的选择。
new Procedure(){ public void doStuff(){ System.out.println("Stuff is being done"); }}
上面是TP
类的匿名内部类。因此,要反序列化,这个匿名内部类及其封闭类TP
必须存在于类路径中:字节流包含类的名称和对象的字段,但不包含类本身的字节代码。
您应该使它成为一个顶级类,或者至少是一个静态的内部类。
你也应该尊重Java的命名惯例:类是camelcased。
本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化 将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化
上下文:我们使用Activiti作为流程引擎,使用Activiti-Rest作为应用程序的接口。由于这个问题与返回由Java序列化的对象的REST服务有关,所以我没有将其添加到标题中。 场景:我们有一个JBoss Wildfly实例,它包含一个EAR和一个包含类“ProcessContext”的模块(为了参考,我们将其称为X)。Activiti在这个EAR中运行,ServiceTasks(从进程中
本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列
本文向大家介绍Java中对象序列化与反序列化详解,包括了Java中对象序列化与反序列化详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中对象序列化与反序列化。分享给大家供大家参考。具体如下: 一、简介 对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。 序列化一般用于以下场景: 1.永久性保存对象,保存对象的字节序列
我已经开始将一个项目从使用Java标准日期迁移到Joda DateTime。 我的项目使用XML序列化将对象保存到XML文件中。在这个特殊的例子中,我有一个Item类,它有一个DateTime属性。 在某个时候,我正在初始化对象,包括像这样的DateTime属性: 我使用XMLEncoder使用辅助类序列化项目: 显然,日期时间被保存在xml中。。。但毫无价值: 显然,它没有保存任何东西,但不,它