protected void initRunnableTask() {
      
      if(taskThread != null) {
         new IllegalStateException("The Task Thread has already been created");
      }
      
      //Create the Thread but don't start it
      if(progressDescriptor.getRunnableTask() != null) {
         taskThread = new Thread(progressDescriptor.getRunnableTask());
      }
      
      //Add a Listener to start the Thread when the Dialog is Opened
      this.addWindowListener(new WindowAdapter() {
         
         public void windowClosed(WindowEvent e) {
            
            //stop spinner
            if(progressDescriptor.getIconComp() instanceof BusySpinner) {
               ((BusySpinner)progressDescriptor.getIconComp()).stop();
            }
         }
         
         public void windowOpened(WindowEvent e) {
            
            //start spinner
            if(progressDescriptor.getIconComp() instanceof BusySpinner) {
               ((BusySpinner)progressDescriptor.getIconComp()).start();
            }
            
            //bail early if no taskThred
            if(taskThread == null) return;
            
            if(!taskThread.isAlive()) {
               taskThread.start();
               
               //Wait for Completion and then dispose org.xito
               if(progressDescriptor.disposeOnComplete()) {
                  Thread waitThread = new Thread(){
                     public void run() {
                        try {
                           taskThread.join();
                        }
                        catch(InterruptedException exp) {
                           System.out.println("Interrupted Wait Thread!");
                        }
                        ProgressDialog.this.dispose();
                        taskThread = null;
                     }
                  };
                  waitThread.start();
               }
            }
         }
      });
   }