OSDN Git Service

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