La prima cosa da fare è imparare che TUTTI i campi di una classe, se non per specifiche esigenze, dovrebbero essere privati e possedere, anche qui in base alle esigenze, dei metodi di accesso (i cosiddetti metodi accessori: getter e setter). Quindi, non si dovrebbe MAI accedere direttamente al campo tramite un riferimento all'oggetto, ma solo tramite un metodo messo a disposizione dell'oggetto stesso. Esempio:
Ora, il tuo codice è parecchio ridondante: non c'è nessuna necessità di avere un riferimento named all'oggetto "this". "this" è già più che sufficiente di per sé.codice:public class Esempio { // Questo campo è privato, non ci accedo direttamente private JButton btn; ... // Se voglio poter lavorare col pulsante dall'esterno // Ho due modi: // Modo 1: creo un metodo che ritorna il pulsante public JButton getBtn() { return btn; } // Modo 2: creo un metodo che permetta di modificare il pulsante dall'esterno // Ad esempio, se voglio abilitarlo/disabilitarlo public void setPulsanteAbilitato(boolean abilitato) { // La modifica la faccio da dentro btn.setEnabled( abilitato ); } }
Quando da una classe voglio passare un riferimento a me stesso, uso appunto this:
La NullPointerException non possiamo sapere da cosa è generata, in quanto il codice che hai postato non fa capire le seguenti cose:codice:new Crawler( this );
1) Come si chiama il pulsante (lo si può intuire, ma non ne siamo sicuri)
2) Dove e quando viene creato questo pulsante nella classe Main
3) Dove e quando viene usato dalla classe Crawler
4) Dove viene generata quell'eccezione perchè non hai postato lo stackTrace completo che ti dice il nome del file e la riga dove quella eccezione viene sollevata)
In mancanza di altro, queste sono le uniche correzioni che posso suggerirti. Metti tutti gli oggetti della classe come privati e costruisci, per quelli strettamente necessari, dei metodi getter (i setter, per gli oggetti grafici, difficilmente sono utili) o dei metodi di lavoro come nel mio esempio.
Dalla classe Crawler fai uso del metodo getter per il pulsante o del metodo di lavoro.
Ciao.![]()



Rispondi quotando