I've been using Java for more years than I care to mention but I never realized that you could catch errors as well as exceptions.i So I've just added one more item to my toolbox. My main() method always uses this template:
try {
  // do something.
} catch (Error e) {
  e.printStackTrace();
} catch (Exception e) {
  e.printStrackTrace();
} finally {
  System.out.println("Done.");
}

Of course, in my real code I use log4j so that the errors are persisted.