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:

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 );
   }
}
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é.

Quando da una classe voglio passare un riferimento a me stesso, uso appunto this:
codice:
new Crawler( this );
La NullPointerException non possiamo sapere da cosa è generata, in quanto il codice che hai postato non fa capire le seguenti cose:

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.