2012-11-07 21 views
6

में वैश्विक अपवाद हैंडलिंग मैं अपने RCP ऐप में वैश्विक अपवाद हैंडलिंग को ओवरराइड करना चाहता हूं। जब भी एक बेजोड़ अपवाद होता है तो मैं इसे लॉग करना चाहता हूं (java लॉगिंग का उपयोग करके) और फिर ऐप से बाहर निकलें। मैंने पहले ही कक्षा में eventLoopException(Throwable exception) विधि को अधिलेखित कर दिया है। लेकिन यह केवल घटना लूप अपवादों को पकड़ता है। अब तक मैं भी इस तरह postStartup() विधि ओवरराइट हैएक ग्रहण आरसीपी ऐप

public void postStartup() 
{ 
    Policy.setStatusHandler(new StatusHandler() 
    { 
     @Override 
      public void show(IStatus status, String title) 
      { 
      LOGGER.log(Level.SEVERE, "Uncaught Exception", status.getException()); 
      UnexpectedErrorDialog(); 
      PlatformUI.getWorkbench().close(); 
      } 
    }); 
} 

यह मेरा लॉग फ़ाइल में अपवाद लॉग करता है और एप्लिकेशन बाहर निकालता है। लेकिन यह स्पष्ट रूप से सही नहीं है और अपवाद को कंसोल में दो बार दिखाया गया है, क्योंकि मैं उपयोगकर्ता को gui dialog में अपवाद के प्रदर्शन को रोक रहा हूं। तो मैं वैश्विक अपवाद हैंडलिंग को सही तरीके से ओवरराइट/बदल सकता हूं, ताकि डिफ़ॉल्ट कोड के बजाय मेरा कोड (लॉग) उपयोग किया जा सके?

उत्तर

2

धन्यवाद ApplicationWorkbenchAdvisor वर्ग

@Override 
public synchronized AbstractStatusHandler getWorkbenchErrorHandler() { 
    if (myStatusHandler == null) { 
     myStatusHandler = new MyStatusHandler(); 
    } 
    return myStatusHandler; 
} 

MyStatusHandler फैली AbstractStatusHandler में रेड्डीज टिप अब मैं AbstractStatusHandler ओवरराइट है Sambi करने के लिए आप सुझाव है और मैं इस तरह संभाल विधि ओवरराइट है :

@Override 
public void handle(StatusAdapter statusAdapter, int style) 
{ 
    if(statusAdapter.getStatus().matches(IStatus.ERROR) && ((style != StatusManager.NONE))) 
    { 
      LOGGER.log(Level.SEVERE, "Uncaught Exception", statusAdapter.getStatus().getException()); 
      UnexpectedErrorDialog(); 
      PlatformUI.getWorkbench().close(); 
    } 
} 

सही काम करने लगता है, केवल नकारात्मक है टोपी मुझे अभी भी 2 कंसोल आउटपुट मिलते हैं।

2

मैं org.eclipse.ui.statusHandlers विस्तार बिंदु का उपयोग करने के