2012-11-07 6 views
6

Ich möchte die globale Ausnahmebehandlung in meiner RCP App überschreiben. Immer wenn eine nicht abgefangene Ausnahme auftritt, möchte ich sie protokollieren (unter Verwendung der java Protokollierung) und dann die App beenden. Ich habe bereits die eventLoopException(Throwable exception) Methode in der ApplicationWorkbenchAdvisor Klasse überschrieben. Dies fängt jedoch nur die Ausnahmen der Ereignisschleife ab. Ab jetzt habe ich auch die postStartup() Methode wie folgt überschrieben:Globale Ausnahmebehandlung in einer Eclipse-RCP-App

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(); 
      } 
    }); 
} 

Es protokolliert die Ausnahme in meiner Protokolldatei und beendet die App. Aber es ist offensichtlich nicht richtig und die Ausnahme wird zweimal in der Konsole angezeigt, denn alles, was ich mache, ist das Abfangen der Ausnahme in einem gui dialog für den Benutzer abfangen. Wie kann ich also die globale Ausnahmebehandlung richtig überschreiben/ändern, so dass mein Code (Protokoll) anstelle des Standardcodes verwendet wird?

Antwort

2

Dank verwenden Reddy Spitze Sambi i jetzt AbstractStatusHandler in der ApplicationWorkbenchAdvisor Klasse

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

MyStatusHandler erweitert AbstractStatusHandler überschrieben haben, und ich habe den Griff Methode wie folgt überschrieben :

@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(); 
    } 
} 

scheint zu funktionieren, nur der Nachteil ist t habe ich noch 2 Konsolenausgänge.

2

Ich würde Ihnen vorschlagen org.eclipse.ui.statusHandlers Erweiterungspunkt