OSDN Git Service

例外の具体化
authorOlyutorskii <olyutorskii@users.osdn.me>
Sat, 30 Apr 2011 14:42:48 +0000 (23:42 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Sat, 30 Apr 2011 14:42:48 +0000 (23:42 +0900)
src/main/java/jp/sourceforge/jindolf/Avatar.java
src/main/java/jp/sourceforge/jindolf/Controller.java
src/main/java/jp/sourceforge/jindolf/Jindolf.java

index 50789ff..e2aed56 100644 (file)
@@ -7,6 +7,8 @@
 \r
 package jp.sourceforge.jindolf;\r
 \r
+import java.io.IOException;\r
+import java.net.URISyntaxException;\r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
 import java.util.HashMap;\r
@@ -16,7 +18,9 @@ import java.util.RandomAccess;
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.ParserConfigurationException;\r
 import jp.sourceforge.jindolf.corelib.PreDefAvatar;\r
+import org.xml.sax.SAXException;\r
 \r
 /**\r
  * Avatar またの名をキャラクター。\r
@@ -36,9 +40,13 @@ public class Avatar implements Comparable<Avatar> {
         try{\r
             DocumentBuilder builder = XmlUtils.createDocumentBuilder();\r
             predefs = PreDefAvatar.buildPreDefAvatarList(builder);\r
-        }catch(RuntimeException e){\r
-            throw e;\r
-        }catch(Exception e){\r
+        }catch(IOException e){\r
+            throw new ExceptionInInitializerError(e);\r
+        }catch(ParserConfigurationException e){\r
+            throw new ExceptionInInitializerError(e);\r
+        }catch(SAXException e){\r
+            throw new ExceptionInInitializerError(e);\r
+        }catch(URISyntaxException e){\r
             throw new ExceptionInInitializerError(e);\r
         }\r
 \r
index be54b6a..32b383b 100644 (file)
@@ -24,6 +24,7 @@ import java.awt.event.WindowEvent;
 import java.io.File;\r
 import java.io.IOException;\r
 import java.io.UnsupportedEncodingException;\r
+import java.lang.reflect.InvocationTargetException;\r
 import java.net.URL;\r
 import java.net.URLEncoder;\r
 import java.util.HashMap;\r
@@ -424,41 +425,59 @@ public class Controller
     }\r
 \r
     /**\r
+     * 例外発生による警告ダイアログへの反応を促す。\r
+     * @param title タイトル文字列\r
+     * @param message メッセージ\r
+     * @param e 例外\r
+     */\r
+    private void warnDialog(String title, String message, Throwable e){\r
+        Jindolf.logger().warn(message, e);\r
+        JOptionPane.showMessageDialog(\r
+            this.topFrame,\r
+            message,\r
+            title + " - " + Jindolf.TITLE,\r
+            JOptionPane.WARNING_MESSAGE );\r
+        return;\r
+    }\r
+\r
+    /**\r
      * L&Fの変更を行う。\r
      */\r
-    // TODO Nimbus対応\r
     private void actionChangeLaF(){\r
         String className = this.actionManager.getSelectedLookAndFeel();\r
 \r
+        String warnTitle = "Look&Feel";\r
+        String warnMsg;\r
+\r
+        Class<?> lnfClass;\r
+        warnMsg = "このLook&Feel[" + className + "]を読み込む事ができません。";\r
+        try{\r
+            lnfClass = Class.forName(className);\r
+        }catch(ClassNotFoundException e){\r
+            warnDialog(warnTitle, warnMsg, e);\r
+            return;\r
+        }\r
+\r
         LookAndFeel lnf;\r
+        warnMsg = "このLook&Feel[" + className + "]を生成する事ができません。";\r
         try{\r
-            Class<?> lnfClass = Class.forName(className);\r
             lnf = (LookAndFeel)( lnfClass.newInstance() );\r
-        }catch(Exception e){\r
-            String message = "このLook&Feel["\r
-                            + className\r
-                            + "]を読み込む事ができません。";\r
-            Jindolf.logger().warn(message, e);\r
-            JOptionPane.showMessageDialog(\r
-                this.topFrame,\r
-                message,\r
-                "Look&Feel - " + Jindolf.TITLE,\r
-                JOptionPane.WARNING_MESSAGE );\r
+        }catch(InstantiationException e){\r
+            warnDialog(warnTitle, warnMsg, e);\r
+            return;\r
+        }catch(IllegalAccessException e){\r
+            warnDialog(warnTitle, warnMsg, e);\r
+            return;\r
+        }catch(ClassCastException e){\r
+            warnDialog(warnTitle, warnMsg, e);\r
             return;\r
         }\r
 \r
+        warnMsg = "このLook&Feel[" + lnf.getName() + "]はサポートされていません。";\r
         try{\r
             UIManager.setLookAndFeel(lnf);\r
         }catch(UnsupportedLookAndFeelException e){\r
-            String message = "このLook&Feel["\r
-                            + lnf.getName()\r
-                            + "]はサポートされていません。";\r
-            Jindolf.logger().warn(message, e);\r
-            JOptionPane.showMessageDialog(\r
-                this.topFrame,\r
-                message,\r
-                "Look&Feel - " + Jindolf.TITLE,\r
-                JOptionPane.WARNING_MESSAGE );\r
+            warnDialog(warnTitle, warnMsg, e);\r
             return;\r
         }\r
 \r
@@ -490,7 +509,10 @@ public class Controller
                 updateStatusBar("Look&Feelを更新中…");\r
                 try{\r
                     SwingUtilities.invokeAndWait(updateUITask);\r
-                }catch(Exception e){\r
+                }catch(InvocationTargetException e){\r
+                    Jindolf.logger().warn(\r
+                            "Look&Feelの更新に失敗しました。", e);\r
+                }catch(InterruptedException e){\r
                     Jindolf.logger().warn(\r
                             "Look&Feelの更新に失敗しました。", e);\r
                 }finally{\r
@@ -1182,7 +1204,10 @@ public class Controller
                             return;\r
                         }\r
                     });\r
-                }catch(Exception e){\r
+                }catch(InvocationTargetException e){\r
+                    Jindolf.logger().fatal(\r
+                            "タブ操作で致命的な障害が発生しました", e);\r
+                }catch(InterruptedException e){\r
                     Jindolf.logger().fatal(\r
                             "タブ操作で致命的な障害が発生しました", e);\r
                 }\r
@@ -1201,7 +1226,10 @@ public class Controller
                                 return;\r
                             }\r
                         });\r
-                    }catch(Exception e){\r
+                    }catch(InvocationTargetException e){\r
+                        Jindolf.logger().fatal(\r
+                                "ブラウザ表示で致命的な障害が発生しました", e);\r
+                    }catch(InterruptedException e){\r
                         Jindolf.logger().fatal(\r
                                 "ブラウザ表示で致命的な障害が発生しました", e);\r
                     }\r
@@ -1613,7 +1641,9 @@ public class Controller
         }else{\r
             try{\r
                 SwingUtilities.invokeAndWait(microJob);\r
-            }catch(Exception e){\r
+            }catch(InvocationTargetException e){\r
+                Jindolf.logger().fatal("ビジー処理で失敗", e);\r
+            }catch(InterruptedException e){\r
                 Jindolf.logger().fatal("ビジー処理で失敗", e);\r
             }\r
         }\r
index 4edf5e1..6d2cd9f 100644 (file)
@@ -17,6 +17,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;\r
 import java.io.LineNumberReader;\r
 import java.io.Reader;\r
+import java.lang.reflect.InvocationTargetException;\r
 import java.net.URL;\r
 import java.security.Permission;\r
 import java.text.DateFormat;\r
@@ -792,7 +793,11 @@ public final class Jindolf{
                     return;\r
                 }\r
             });\r
-        }catch(Throwable e){\r
+        }catch(InvocationTargetException e){\r
+            logger().fatal("アプリケーション初期化に失敗しました", e);\r
+            e.printStackTrace(System.err);\r
+            hasError = true;\r
+        }catch(InterruptedException e){\r
             logger().fatal("アプリケーション初期化に失敗しました", e);\r
             e.printStackTrace(System.err);\r
             hasError = true;\r