In the following code, public class Some''''''Widget { Text fileContent_; void setup() { ... dialog_.addSelectionListener(new Selection''''''Listener() { public void widgetSelected(Selection''''''Event e) { String fileName = dialog_.open(); try { fileContent_.setText(readFileContents(fileName)); } catch (IOException e) { throw new RuntimeException(e); } } ... }); } readFileContents(String name) throws IOException {/*Some code*/} } The ''readFileContents'' throws an IOException, which cannot be re-thrown because the S''''''electionListener is an interface which does not declare a ''throws'' clause in the method widgetSelected. Hence, it is not possible to let the user of S''''''omeWidget handle the exception, because even if we throw a RuntimeException, it gets thrown in a Thread that is different from the one that uses S''''''omeWidget. One solution could be to use Publisher-Subscriber technique for error reporting. For example: public class Some''''''Widget { Text fileContent_; void setup() { ... dialog_.addSelectionListener(new Selection''''''Listener() { public void widgetSelected(Selection''''''Event e) { String fileName = dialog_.open(); try { fileContent_.setText(readFileContents(fileName)); } catch (IOException e) { reportException(e); } } ... }); } readFileContents(String name) throws IOException {/*Some code*/} addExceptionListener(Exception''''''Listener l) { excListeners_.add(l); } reportException(Throwable t) { /* Iterate thro' excListeners_ and call exceptionOccurred() */ } } public interface Exception''''''Listener { void exceptionOccurred(Throwable t); } /* Clients of Some''''''Widget. */ ... Some''''''Widget s = new Some''''''Widget(); ... s.addExceptionListener(new Exception''''''Listener() { void exceptionOccurred(Throwable t) { Message''''''Dialog.showDialog(t.getMessage()); } }); ... This technique allows for more than one handlers to the same exception, centralized error reporting etc. -- VhIndukumar with Biresh ---- CategoryException