Gab*_*lli 5 java class file loader deserialization
我对Java知之甚少.我正在尝试读取一个包含int的文件和一个名为"Automobile"的类的各种实例.但是,当我反序列化它时,程序抛出一个ClassNotFoundException,我似乎无法理解为什么.
这是代码:
try {
FileInputStream fin = new FileInputStream(inputFile);
ObjectInputStream input = new ObjectInputStream(fin);
conto = input.readInt();
Automobile[] macchine = new Automobile[conto];
for(int i = 0; i < conto; i++) {
macchine[i] = (Automobile)input.readObject();
}
String targa;
System.out.print("\nInserire le cifre di una targa per rintracciare l'automobile: ");
targa = sc1.nextLine();
for(int i = 0; i < conto; i++) {
if(macchine[i].getTarga().equals(targa))
System.out.println(macchine[i]);
}
} catch(IOException e) {
System.out.println("Errore nella lettura del file "+inputFile);
} catch(java.lang.ClassNotFoundException e) {
System.out.println("Class not found");
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:这是堆栈跟踪
java.lang.ClassNotFoundException: es4.Automobile
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at es4p2.Main.main(Main.java:35)
Run Code Online (Sandbox Code Playgroud)
反序列化序列化对象树时,所有对象的类必须位于类路径上.在这种情况下,ClassNotFoundException
很可能意味着所需的类之一不在类路径上.您必须解决此问题才能使反序列化工作.
在这种情况下,es4.Automobile
缺少.
这个问题可能是由我所做的自定义异常导致的吗?
我能想到的唯一其他可能性是:
es4.Automobile
直接或间接依赖于其他一些缺失的类es4.Automobile
或依赖类抛出了一个未在类内部捕获的异常.但是这两者都应该(我认为)导致了不同的堆栈跟踪.
我刚注意到包名是es4p2,而不是es4.为什么说es4?可能是因为保存文件的程序使用另一个包名?
我不知道他们为什么会有所不同.您需要与编写代码/生成序列化对象的人交谈.但是,这很可能是导致问题的原因.具有不同包名称的类是不同的类.期.
捕获意外异常时,应始终输出(或更好地,记录)堆栈跟踪.这将告诉你(和我们)更多关于出错的地方,在这种情况下,缺少类的名称.
归档时间: |
|
查看次数: |
9076 次 |
最近记录: |