2013-02-04 17 views
6

ऐसा क्यों है कि जब मैं इस कोड के चारों ओर एक स्विंगवर्कर लपेटता हूं तो यह अब एक अपवाद को फेंकने की रिपोर्ट नहीं करता है?स्विंगवर्कर के अंदर फेंकने पर मेरा जावा अपवाद स्टैक ट्रेस क्यों नहीं प्रिंट करता है?

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

क्या इसे फेंक दिया गया है या रिपोर्ट नहीं किया गया है? –

+0

इसकी रिपोर्ट नहीं की जा रही है। मुझे लगता है कि इसे फेंक दिया जा रहा है लेकिन स्टैकट्रैक प्रिंट नहीं कर रहा है। – sdasdadas

+2

मेरा अनुमान है कि एक अपवाद अभी भी फेंक दिया गया है, लेकिन आंतरिक हैंडलर का कॉल 'doInBackground()' को अपवादों को अनदेखा करने के लिए डिज़ाइन किए गए प्रयास-पकड़ कथन में लपेटा गया है। – Vulcan

उत्तर

8

आप किसी भी अपवाद doInBackground() में हुई पुनः प्राप्त करने के get() कॉल करनी होगी। उदाहरण के लिए, आप इसे done() विधि में कर सकते हैं, यानी:

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

बिल्कुल सही, धन्यवाद! – sdasdadas

+0

@ सदादादास आपका स्वागत है! :) – tenorsax

+0

लेकिन ... क्या JUL को लॉग अप अपवाद है या ऐसा कुछ है? –