optimization updates
[debian/openrocket] / src / net / sf / openrocket / gui / main / ExceptionHandler.java
index cd4af70bad5fbfdc2bf97330383aaf34b4f79f0a..74f3091757ad4dc1cbcf6136228668d489ae7549 100644 (file)
@@ -113,7 +113,7 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
         * @param message       the error message.
         * @param exception     the exception that occurred.
         */
-       public static void handleErrorCondition(String message, Exception exception) {
+       public static void handleErrorCondition(String message, Throwable exception) {
                log.error(1, message, exception);
                handleErrorCondition(new InternalException(message, exception));
        }
@@ -128,7 +128,7 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
         * 
         * @param exception             the exception that occurred.
         */
-       public static void handleErrorCondition(final Exception exception) {
+       public static void handleErrorCondition(final Throwable exception) {
                try {
                        if (!(exception instanceof InternalException)) {
                                log.error(1, "Error occurred", exception);
@@ -186,7 +186,7 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
                }
                
                // Unknown Error
-               if (!(e instanceof Exception)) {
+               if (!(e instanceof Exception) && !(e instanceof LinkageError)) {
                        log.info("Showing Error dialog");
                        JOptionPane.showMessageDialog(null,
                                        new Object[] {
@@ -338,6 +338,22 @@ public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
                        }
                }
                
+
+               /*
+                * Detect and ignore bug 6933331 in Sun JRE 1.6.0_18 and others
+                */
+               if (t instanceof IllegalStateException) {
+                       StackTraceElement[] trace = t.getStackTrace();
+                       
+                       if (trace.length > 1 &&
+                                       trace[0].getClassName().equals("sun.awt.windows.WComponentPeer") &&
+                                       trace[0].getMethodName().equals("getBackBuffer")) {
+                               log.warn("Ignoring Sun JRE bug 6933331 " +
+                                               "(see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6933331): " + t);
+                               return true;
+                       }
+               }
+               
                /*
                 * Detect and ignore bug in Sun JRE 1.6.0_19
                 */