【发布时间】:2015-09-01 07:26:10
【问题描述】:
我有一个序列化问题,无法找到原因。这是 Eclipse 中的一个 Android 应用程序,它给了我一个非常无用的堆栈跟踪,如下所示:
09-01 00:06:24.414: W/System.err(9961): java.io.NotSerializableException: com.myprogram.main.Entity$1
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
09-01 00:06:24.414: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
09-01 00:06:24.415: W/System.err(9961): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
找到Java flag to enable extended Serialization debugging info我决定设置
-Dsun.io.serialization.extendedDebugInfo=true
在How can I specify the default JVM arguments for programs I run from eclipse? 之后,我将标志插入到我的 JRE 的 VM 参数中,但堆栈跟踪没有改变。重新启动 Eclipse 没有帮助。因此,在Editing the vm args of eclipse 之后,我将标志添加到了我的 eclipse.ini 中,但堆栈跟踪仍然没有改变。我期待一个类似于java.io.NotSerializableException – but where is the field? 的输出。
我知道com.myprogram.main.Entity$1 不可序列化。这很容易。问题是为什么?关于我如何解决这个 java.io.NotSerializableException 的任何建议?
【问题讨论】:
-
这很简单:你有一个匿名类
com.myprogram.main.Entity$1不是Serializable.你不需要扩展调试。 -
谢谢,但我不明白。我有
public abstract class Entity implements Serializable {...}。java.io.ObjectOutputStream.writeObject(Object object)以前可以工作,但从那以后我做了很多更改,现在我得到了错误。我相信我所做的更改使我的课程“不可序列化”,所以我正在尝试调试以追踪它。 -
另外,我读到
$1通常是指内部类的问题。我没有任何内部类!我尝试打开扩展调试的另一个原因。 -
已修复。我没有意识到
Runnable()是一个内部类。您的标题对将来研究此问题的任何人都完全没有帮助。我会再次修复。 -
A
Runnable不是内部类。 实现Runnable的匿名内部类是匿名内部类。如果它实现了任何其他接口,或者扩展了任何其他类,或者即使它没有实现,也一样。与Runnable本身 无关。很高兴你在一场战斗之后找到了更好的头衔。
标签: java android debugging serialization