OSDN Git Service

画面のプロファイル生成処理で共通化できる部分を共通化
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / Main.java
1 package yukihane.inqubus;
2
3 import java.io.IOException;
4 import java.nio.file.Path;
5 import java.nio.file.Paths;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8 import javax.swing.JOptionPane;
9 import javax.swing.UIManager;
10 import javax.swing.UIManager.LookAndFeelInfo;
11 import javax.swing.UnsupportedLookAndFeelException;
12 import org.apache.commons.configuration.ConfigurationException;
13 import yukihane.inqubus.config.Config;
14 import yukihane.inqubus.gui.MainFrame;
15 import yukihane.inqubus.saccubus.prompt.Prompt;
16
17 /**
18  * いんきゅばす起動クラス.
19  * @author yuki
20  */
21 public class Main {
22
23     private static final Logger logger = Logger.getLogger(Main.class.getName());
24
25     public static void main(String args[]) {
26         final Path path = Paths.get("inqubus.xml");
27         boolean showWelcome;
28         try {
29             Config.INSTANCE.load(path.toString());
30             showWelcome = false;
31         } catch (ConfigurationException ex) {
32             showWelcome = true;
33             logger.log(Level.FINER, "コンフィグファイルが無いためデフォルト値で起動", ex);
34         }
35
36         // 第1引数がメールアドレスと思しき時はさきゅばすフォーマットのコマンドラインであるとみなしてパース
37         if (args.length > 0 && args[0].contains("@")) {
38             try {
39                 new Prompt().main(args);
40             } catch (Exception ex) {
41                 logger.log(Level.SEVERE, "処理が正常終了しませんでした", ex);
42             }
43             return;
44         }
45
46         final RunWindow invoke = new RunWindow(showWelcome);
47         java.awt.EventQueue.invokeLater(invoke);
48     }
49
50     private static class RunWindow implements Runnable {
51
52         private final boolean showWelcome;
53
54         private RunWindow(boolean showWelcome) {
55             this.showWelcome = showWelcome;
56         }
57
58         @Override
59         public void run() {
60             setLookAndFeel();
61             final MainFrame frame = new MainFrame();
62             frame.startWatcher();
63             frame.setVisible(true);
64             if (showWelcome) {
65                 JOptionPane.showMessageDialog(frame,
66                         "<html>設定はメニューの <b>ツール > オプション</b> から行えます</html>",
67                         "いんきゅばすへようこそ", JOptionPane.INFORMATION_MESSAGE);
68             }
69         }
70     }
71
72     private static void setLookAndFeel() {
73         try {
74             for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
75                 if ("Nimbus".equals(info.getName())) {
76                     UIManager.setLookAndFeel(info.getClassName());
77                     break;
78                 }
79             }
80         } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
81             try {
82                 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
83             } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
84                 // System Look & Feel も無いことは無いだろう
85             }
86         }
87     }
88 }