2012-10-17 16 views
6

ho ricevuto il seguente messaggio di errore quando si tenta di eseguire il debug di un'applicazione in NetBeans:Come posso identificare una classe interna anonima in un NotSerializableException

java.io.WriteAbortedException: scrittura abortito; java.io.NotSerializableException: board.Board $ 1

Nel corso di debug ho dovuto inserire 'implementa Serializable' in un certo numero di classi come l'eccezione è sorto nel corso della lettura da un file che memorizza una grande oggetto Questo non è stato difficile in quanto la classe che ha bisogno di attenzione è stata chiara dal messaggio di eccezione. Ciò che mi ha gettato è l'apparente anonima classe interna 'Consiglio $ 1'. Non posso per la vita di me identificare la fonte con 'Board' che sta causando il problema. Come posso fare questo?

Poiché si tratta di una pratica di debug piuttosto che di specifiche del codice (credo), non l'ho inclusa, ma posso aggiungerla facilmente se aiuta.

risposta

5

Board$1 è la prima classe anonima rilevata in Board.java. Ad esempio:

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

Con un IDE come Eclipse, è facile individuare le classi anonime nella vista struttura. Sono sicuro che NetBeans ha opinioni simili:

enter image description here

+0

Ho copiato i miei file su Eclipse e ho utilizzato Package Explorer per scavare nel Board ma non ho trovato nulla. Ma sulla base della firma che hai usato, nuovo Object() {}, ho trovato il nuovo MouseAdapter() {...}, che non sembra apparire in Eclipse o NetBeans. Ho inserito il transient per impedirne la scrittura sul file. Sembra funzionare, ma ora ho un altro bug non correlato ... Ci lavorerò ora, supponendo di aver risolto questo. – forsate

+0

OK - l'altro bug non correlato è risolto come il problema originale. Ovvio a posteriori. Molte grazie, Lukas. Ora mi chiedo se un po 'di codice sospetto da parte mia sia la ragione per cui MouseAdapter non viene visualizzato, ma questo è un altro problema. – forsate

3

In IntelliJ (e Android Studio) si può Navigate-> Classe (⌘-O su Mac) e incollarlo in Board$1, e vi porterà alla codice per quella classe interiore.

+0

ha controllato Netbeans 8 e non è riuscito a trovare un modo per mostrare le classi interne anonime nel pannello Navigatore o navigare ad esso come IntelliJ = / –

Problemi correlati