【问题标题】:How can I identify an anonymous inner class in a NotSerializableException如何在 NotSerializableException 中识别匿名内部类
【发布时间】:2012-10-07 13:53:31
【问题描述】:

尝试在 NetBeans 中调试应用程序时收到以下错误消息:

java.io.WriteAbortedException:写入中止; java.io.NotSerializableException: board.Board$1

在调试过程中,我不得不在许多类中插入“实现可序列化”,因为在从存储大对象的文件中读取时出现异常。这并不困难,因为从异常消息中可以清楚地看出需要注意的类。让我感到震惊的是明显的匿名内部类“Board$1”。我一生都无法确定导致问题的“董事会”的来源。我该怎么做?

因为这是调试实践的问题,而不是代码的细节(我认为)我没有包含它,但如果有帮助,我可以轻松添加。

【问题讨论】:

    标签: java anonymous notserializableexception


    【解决方案1】:

    Board$1Board.java 中遇到的第一个匿名类。例如:

    class Board {
      public static void main(String[] args) {
        new Object() {}; // Board$1
        new Object() {}; // Board$2
      }
    }
    

    使用像 Eclipse 这样的 IDE,很容易在大纲视图中发现那些匿名类。我相信 NetBeans 也有类似的看法:

    【讨论】:

    • 我将文件复制到 Eclipse 并使用 Package Explorer 挖掘 Board,但什么也没找到。但是根据您使用的签名 new Object() {},我发现了 new MouseAdapter() {...},它似乎没有出现在 Eclipse 或 NetBeans 中。我插入了瞬态以防止将其写入文件。这似乎可行,但现在我有另一个不相关的错误......我现在会解决这个问题,假设我已经解决了这个问题。
    • OK - 另一个不相关的错误已修复,与原始问题一样。事后看来很明显。非常感谢,卢卡斯。现在我想知道我的一些可疑代码是否是导致 MouseAdapter 未显示的原因,但这是另一个问题。
    【解决方案2】:

    在 IntelliJ(和 Android Studio)中,可以 Navigate->Class(Mac 上的⌘-O)并粘贴到 Board$1,它会将您带到该内部类的代码。

    【讨论】:

    • 检查了 Netbeans 8,但找不到在导航器面板中显示匿名内部类或像 IntelliJ 一样导航到它的方法 =/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多