У меня есть приложение SWT / JFace, которое использует класс Realm (не уверен в концепции) для запуска основной программы в виде потока. Я пытаюсь перехватить любые необработанные исключения, используя блок try / catch вокруг моего основного кода:
public static void main(String args[]) {
// ref: http://forums.instantiations.com/viewtopic.php?f=1&t=1583
Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
public void run() {
try {
PropertyConfigurator.configure("log4j.properties");
MainWindow window = new MainWindow();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();
} catch (Exception e) {
MessageDialog.openError(null, "Error", "Error occurred: " + e.getMessage());
logger.error("Error!!!", e);
e.printStackTrace();
}
}
});
}
Ошибки возвращаются обратно в строку window.open()
, но затем передаются в Realm, поэтому блок catch
никогда не достигается. Вот конец трассировки стека:
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at com.ism.MainWindow$1.run(MainWindow.java:210) <-- "window.open();"
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at com.ism.MainWindow.main(MainWindow.java:204) <-- "Realm.runWithDefault....."
Пытался выставить попытку / поймать Realm.runWithDefault
, но это тоже не сработало.
Как мне перехватить все исключения в этом случае?