2013-02-04 13 views
6

Perché quando si avvolge uno SwingWorker con questo codice, non viene più generata un'eccezione?Perché la mia eccezione Java non stampa una traccia di stack quando viene lanciata all'interno di SwingWorker?

import java.security.InvalidParameterException; 

import javax.swing.SwingUtilities; 
import javax.swing.SwingWorker; 

public class Test { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new SwingWorker<Void, Void>() { 

        @Override 
        protected Void doInBackground() throws Exception { 
         IntegerString s = new IntegerString("EIGHT"); 
         return null; 
        } 

       }.execute(); 

      } 

     }); 

    } 

} 

class IntegerString { 

    public IntegerString(String s) { 
     if (!isInteger(s)) { 
      System.out.println("...throwing exception."); 
      throw new InvalidParameterException("Thrown."); 
     } 
     // ... 
    } 

    static boolean isInteger(String str) { 
     if (str == null) { 
      return false; 
     } 
     int length = str.length(); 
     if (length == 0) { 
      return false; 
     } 
     int i = 0; 
     if (str.charAt(0) == '-') { 
      if (length == 1) { 
       return false; 
      } 
      i = 1; 
     } 
     for (; i < length; i++) { 
      char c = str.charAt(i); 
      if (c <= '/' || c >= ':') { 
       return false; 
      } 
     } 
     return true; 
    } 
} 
+1

Non viene generato o non segnalato come previsto? –

+0

Non viene segnalato. Presumo che venga lanciato ma lo stacktrace non sta stampando. – sdasdadas

+2

La mia ipotesi è che un'eccezione sia ancora lanciata, ma la chiamata del gestore interno a 'doInBackground()' è racchiusa in un'istruzione try-catch progettata per ignorare le eccezioni. – Vulcan

risposta

8

devi chiamare get() per recuperare tutte le eccezioni che si sono verificati in doInBackground(). Ad esempio, puoi farlo nel metodo done(), ad esempio:

@Override 
protected void done() { 
    try { 
     get(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

Perfetto, grazie! – sdasdadas

+0

@sdasdadas Prego! :) – tenorsax

+0

ma ... è l'eccezione registrata su JUL o qualcosa del genere? –

Problemi correlati