Как я могу идентифицировать анонимный внутренний класс в NotSerializableException

Я получил следующее сообщение об ошибке при попытке отладки приложения в NetBeans:

java.io.WriteAbortedException: запись прервана; java.io.NotSerializableException: board.Board$1

В ходе отладки мне пришлось вставить «реализует Serializable» в ряд классов, поскольку исключение возникало при чтении из файла, в котором хранится большой объект. Это было нетрудно, так как класс, требующий внимания, был ясен из сообщения об исключении. Что меня бросило, так это очевидный анонимный внутренний класс Board $ 1. Я не могу на всю жизнь определить источник с «Доской», который вызывает проблему. Как я могу это сделать?

Поскольку это вопрос практики отладки, а не специфики кода (я думаю), я не включил его, но могу легко добавить, если это поможет.


person forsate    schedule 17.10.2012    source источник


Ответы (2)


Board$1 — это первый анонимный класс, встречающийся в Board.java. Например:

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

С такой IDE, как Eclipse, эти анонимные классы легко обнаружить в представлении структуры. Я уверен, что NetBeans имеет аналогичные взгляды:

введите здесь описание изображения

person Lukas Eder    schedule 17.10.2012
comment
Я скопировал свои файлы в Eclipse и использовал Package Explorer, чтобы копаться в Board, но ничего не нашел. Но на основе использованной вами подписи, new Object() {}, я нашел new MouseAdapter() {...}, который, похоже, не отображается в Eclipse или NetBeans. Я вставил переходный процесс, чтобы предотвратить его запись в файл. Кажется, это работает, но теперь у меня есть еще одна, не связанная с этим ошибка... Сейчас я поработаю над ней, предполагая, что я решил эту. - person forsate; 17.10.2012
comment
ОК - другая несвязанная ошибка исправлена, как и исходная проблема. Очевидно задним числом. Большое спасибо, Лукас. Теперь мне интересно, является ли немного подозрительного кода с моей стороны причиной того, что MouseAdapter не появляется, но это еще одна проблема. - person forsate; 17.10.2012

В IntelliJ (и Android Studio) можно перейти к классу (⌘-O на Mac) и вставить Board$1, и вы попадете в код для этого внутреннего класса.

person Stan Kurdziel    schedule 08.12.2015
comment
проверил Netbeans 8 и не смог найти способ показать анонимные внутренние классы на панели Navigator или перейти к нему, как IntelliJ =/ - person Stan Kurdziel; 08.12.2015