Newer
Older
KisoJikkenNWP / src / main / java / istlab / KisoJikken / JExecutor.java
package istlab.KisoJikken;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class JExecutor implements Runnable {

    Thread thread;
    Process process;
    String absolutePath;
    String commandLineOption;
    String pkgname;
    String javafname;

    public JExecutor(String p, String comlineOpt) {
        absolutePath = p;
        commandLineOption = comlineOpt;
        if (commandLineOption.equals("arg1 arg2 ...")) {
            commandLineOption = "";
        }
        thread = new Thread(this);
        String[] ary;
        if (File.separator.equals("\\")) {
            ary = absolutePath.split("\\\\");
        } else {
            ary = absolutePath.split(File.separator);
        }
        for (int i = 0; i < ary.length; i++) {
            if (ary[i].equals("src")) {
                pkgname = ary[i + 1];
                javafname = ary[i + 2].substring(0, ary[i + 2].length() - 5);
                break;
            }
        }
        thread.start();
    }

    @Override
    public void run() {
        ArrayList<String> comlist = new ArrayList<String>();
        comlist.add("java");
        comlist.add(pkgname + "." + javafname);
        // コマンドラインオプションをtrimした結果が空文字列なら追加しない
        if (commandLineOption.trim().length() > 0) {
            String[] split = commandLineOption.split(" ");
            for (int i = 0; i < split.length; i++)
                comlist.add(split[i]);
        }

        ProcessBuilder processBuilder = new ProcessBuilder(comlist);
        processBuilder.redirectErrorStream(true);
        JTAConsole con = new JTAConsole("(Exec) java " + pkgname + "." + javafname + " " + commandLineOption);
        con.Systemoutprintln("== 実行開始 ==");
        con.Systemoutprintln("> cd ~" + App.nwpsrc);
        con.Systemoutprintln("> java " + pkgname + "." + javafname + " " + commandLineOption);
        // ProcessBuilder processBuilder = new ProcessBuilder("pwd");
        processBuilder.directory(new File(App.userhome + App.nwpsrc));
        // processBuilder.inheritIO();
        try {
            process = processBuilder.start();
            Launcher.allProcs.add(process);
            con.startBR(process);
            // process.waitFor();

        } catch (IOException e1) {
            e1.printStackTrace();
        }

        con.Systemoutprintln("== 実行終了 ==  (ALT+Wで閉じる)");
        thread = null;
    }
}