Package org.eclipse.swt.internal
Class ExceptionStash
java.lang.Object
org.eclipse.swt.internal.ExceptionStash
- All Implemented Interfaces:
AutoCloseable
The intent of this class is to insulate SWT from exceptions occurring in
user's listeners, so that SWT remains stable and does not accidentally
crash JVM or enter some very broken state. The supposed use is:
void someSwtInternalFunction() { // Make a stash to collect all exceptions from user listeners try (ExceptionStash exceptions = new ExceptionStash ()) { // Perform some action that may call a throwing user's listener try { sendEvent(SWT.SomeEvent); } catch (Error | RuntimeException ex) { exceptions.stash (ex); } // Do some important SWT stuff that you would normally do in // 'finally' clause. With 'ExceptionStash' you can interleave // important things with listeners without making code ugly. MakeSureThingsDontBreak(); // Perform another action that may call a throwing user's listener. // Done in an independent 'try' block to make sure that all events // are sent regardless of exceptions in some of the listeners. try { askWidgetToSendMoreEvents(); } catch (Error | RuntimeException ex) { exceptions.stash (ex); } // Exiting from 'try' statement will close ExceptionStash and // re-throw collected exception. If there are multiple exceptions, // all subsequent ones will be added as 'Throwable.addSuppressed()'. } }
-
Constructor Summary
-
Method Summary
-
Constructor Details
-
ExceptionStash
public ExceptionStash()
-
-
Method Details
-
stash
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
-