OSDN Git Service

281167c962afcd49dbfb3342dd1912d89b958bf0
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / util / ErrorMessageHelper.java
1 package charactermanaj.util;
2
3 import java.awt.Component;
4 import java.awt.Dimension;
5 import java.io.PrintWriter;
6 import java.io.StringWriter;
7 import java.util.logging.Level;
8 import java.util.logging.Logger;
9
10 import javax.swing.JOptionPane;
11 import javax.swing.JScrollPane;
12 import javax.swing.JTextArea;
13
14 /**
15  * 例外を表示するダイアログ.<br>
16  * ログにも記録される.<br>
17  * @author seraphy
18  */
19 public final class ErrorMessageHelper {
20
21         /**
22          * ロガー
23          */
24         private static final Logger logger = Logger.getLogger(ErrorMessageHelper.class.getName());
25
26         
27         private ErrorMessageHelper() {
28                 super();
29         }
30
31         /**
32          * 例外が発生したことを示すダイアログを表示し、ログに記録する.<br>
33          * @param parent ダイアログを表示する親、null可
34          * @param ex 例外、nullの場合はなにもせずに戻る.
35          */
36         public static void showErrorDialog(Component parent, Throwable ex) {
37                 if (ex == null) {
38                         return;
39                 }
40
41                 // ログに記録する.
42                 logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
43                 
44                 // 例外を表示するパネルの生成
45                 JTextArea textArea = new JTextArea();
46                 
47                 StringWriter sw = new StringWriter();
48                 PrintWriter pw = new PrintWriter(sw);
49                 ex.printStackTrace(pw); // 例外のコールスタックをパネルに表示できるように出力
50                 pw.close();
51
52                 textArea.setText(sw.toString());
53                 
54                 textArea.setSelectionStart(0);
55                 textArea.setSelectionEnd(0);
56                 textArea.setEditable(false);
57                 
58                 JScrollPane scr = new JScrollPane(textArea);
59                 scr.setPreferredSize(new Dimension(400, 150));
60                 scr.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
61                 scr.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
62
63                 // ダイアログの表示
64                 JOptionPane.showMessageDialog(parent, scr, "ERROR", JOptionPane.ERROR_MESSAGE);
65         }
66
67 }