Innanzitutto ti ringrazio per la pazienza e la gentilezza![]()
Ho creato il metodo per cambiare lo stato del bottone, mettendo private a btnStart.
Avevo agito in questo modo perchè lo passavo in un ActionListener, quindi non mi vedeva l'oggetto Main, ma ActionListener. Ho però aggiustato come hai detto tu, spostando il passaggio, e ponendolo nel metodo che passa tutti i dati alla classe Crawler...cosa molto più ovviaOra, 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é.
Quando da una classe voglio passare un riferimento a me stesso, uso appunto this:
codice:new Crawler( this );![]()
Il pulsante si chiama btnStart
1) Come si chiama il pulsante (lo si può intuire, ma non ne siamo sicuri)
Il pulsante viene creato nel costruttore della classe Main, così come tutta l'interfaccia grafica. Questo costruttore viene chiamato nella stessa classe dal main, creando un oggetto e settando visible.2) Dove e quando viene creato questo pulsante nella classe Main
La mia idea è farlo utilizzare alla fine di un metodo della classe Crawler - end() -, che viene chiamato quando non ci sono più pagine da visitare, quindi è finita la sessione di crawling e scrive il report su di un file. Di fatto quando finisce la "sessione" del programma.3) Dove e quando viene usato dalla classe Crawler
L'eccezione si verificava all'interno del metodo che ti ho citato sopra, in corrispondenza dell'utilizzo dell'oggetto Main che passo alla classe Crawler, quindi in corrispondenza di4) 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)
dove setButtonEnabled è il metodo setter che ho appena creato sotto tuo consiglio, e framePrinc viene settato tramite il costruttore che ho aggiuntocodice:framePrinc.setButtonEnabled();
con framePrinc così definitocodice:public Crawler (Main main) { framePrinc=main; }
Lo stackTrace incriminato ècodice:private Main framePrinc;
codice:Exception in thread "Esploratore 0" java.lang.NullPointerException at Explorer.Crawler.end(Crawler.java:102) // qui è dove chiamo framePrinc.setButtonEnabled at Explorer.Crawler.addPaginaVisitata(Crawler.java:143) at Explorer.Crawler.getPaginaDaVisitare(Crawler.java:208) at Explorer.PageExplorer.run(PageExplorer.java:45)

Rispondi quotando