【发布时间】:2013-08-20 09:49:38
【问题描述】:
错误:
java.lang.ClassNotFoundException: testprocedure.tp$3 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 java.io.ObjectInputStream.resolveClass(未知来源) 在 java.io.ObjectInputStream.readNonProxyDesc(未知来源) 在 java.io.ObjectInputStream.readClassDesc(未知来源) 在 java.io.ObjectInputStream.readOrdinaryObject(未知来源) 在 java.io.ObjectInputStream.readObject0(未知来源) 在 java.io.ObjectInputStream.defaultReadFields(未知来源) 在 java.io.ObjectInputStream.readSerialData(未知来源) 在 java.io.ObjectInputStream.readOrdinaryObject(未知来源) 在 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();
但是我从不同的程序集合中加载,这些程序具有-ALL-必需的代码但“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 oop serialization deserialization