Non capisco come mai il pulsante non sia disponibile finchè le operazioni del thread non sono concluse... i thread servono proprio a questo, a permettere la parallelizzazione delle operazioni in un processo.
Non è che hai fatto qualche errore nell'implementazione? Magari hai costruito e/o visualizzato il pulsante DOPO la partenza del thread?

La struttura dovrebbe essere grossomodo questa:
codice:
public class MiaApplet extends Applet {
   class MioThread extends Thread {
      ...
      public void run() { ... // Operazioni gravose }
      ...
   }

   ...
   private MioThread mt;
   private Button start;
   private Button stop;
   ...

   public void init() {
      ... // inizializzazioni
      start= new Button("START");
      start.addActionListener( new ActionListener() {
         public void actionPerformed(ActionEvent ae) { avviaThread(); }
      });

      stop= new Button("STOP");
      stop.addActionListener( new ActionListener() {
         public void actionPerformed(ActionEvent ae) { fermaThread(); }
      });

      mt = new MioThread();
      ...
      add(start);
      add(stop);
   }

   private void avviaThread() {
      mt.start();
   }

   private void fermaThread() {
      mt.interrupt();   // Oppure un metodo specifico
   }

   ...
}
In questo modo il pulsante dovrebbe essere disponibile fin da subito, anche prima di avviare il thread.


Ciao.