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.setMainSrcByFileName(absolutePath); 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; } }