@634

簡易ランチャーの作成

Advertisement

OSプロセスの起動

J2SE5.0にはOSのプロセスを操作するためのクラスである、java.lang.ProcessBuilderが追加された。J2SE5.0より前のバージョンでは、java.lang.Runtimeクラスを利用してOSプロセスを起動していたが、ProcessBuilderの方が利用が容易である。ただし、実現できる機能は同じ。

以下ような記述を行うと、プロセスを実行することができる。
ProcessBuilder builder = new ProcessBuilder("java");
Process process = builder.start();

java.lang.ProcessクラスのgetInputStream()メソッドで標準出力を取得することができ、getErrorStream()メソッドで標準エラー出力を取得することができる。

ランチャーを作る

以下の点は無視
  • デザイン
  • 例外発生時の処理
  • 使いやすさ

環境
  • J2SE5.0

Launcher.java
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class Launcher extends JFrame{
    private static final long serialVersionUID = 1L;

    /** 初期設定を行う */
    public Launcher(){
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.getContentPane().setLayout(new FlowLayout());

        JButton addButton = new JButton("add");
        addButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            addButton();
        }});
        this.getContentPane().add(addButton);
    }

    /** ボタンの追加 */
    public void addButton(){
        JFileChooser chooser = new JFileChooser();
        if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){
            final String filePath = chooser.getSelectedFile().getPath();

            JButton button = new JButton(chooser.getSelectedFile().getName());
            button.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    run(filePath);
                }});            
            this.getContentPane().add(button);
            this.setVisible(true);
        }
    }

    /** プロセスの起動 */
    public void run(String path){
        ProcessBuilder builder = new ProcessBuilder(path);
        try {
            Process process = builder.start();
        } catch (IOException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this.getContentPane(), "プロセスの起動に失敗しました。");
        }
    }

    /** プログラムの起動 */
    public static void main(String args[]){

        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.OceanTheme());

        Launcher mf = new Launcher();
        mf.setTitle("launcher");
        mf.setSize(400, 300);
        mf.setVisible(true);
    }
}

ポイント

ダイアログで選択されたプログラムの絶対パスを取得し、リスナーメソッドと関連付けている。

実行画面

図1:起動
図1:起動

図2:追加ファイル選択
図2:追加ファイル選択

図3:追加後
図3:追加後

図4:メモ帳起動
図4:メモ帳起動

図5:起動失敗
図5:起動失敗

メモ:使いやすさを向上するなら…

  • 選択ダイアログで実行ファイル以外はフィルタリングする。
  • ボタンの配置を整える。
  • ボタンをイメージボタンにする。
  • 常に前面表示。
  • コンソールアプリケーションの実行結果を表示するようにする。

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール