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; /** * 引数はコマンドライン * * @param p * @param comlineOpt */ 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 -D\"file.encoding=UTF-8\" "); if (App.isWindows) { comlist.add("wt"); } else { } 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 = null; if (!App.isWindows) { con = new JTAConsole("(Exec) java " + pkgname + "." + javafname + " " + commandLineOption); con.setMainSrcByFileName(absolutePath); con.Systemoutprintln("=== 実行開始 ==="); con.Systemoutprintln(CommandRunner.prompt + "cd ~" + App.nwpsrc); con.Systemoutprintln(CommandRunner.prompt + "java " + pkgname + "." + javafname + " " + commandLineOption); } // ProcessBuilder processBuilder = new ProcessBuilder("pwd"); processBuilder.directory(new File(App.userhome + App.nwpsrc)); // processBuilder.inheritIO(); try { process = processBuilder.start(); if (!App.isWindows) { Launcher.allProcs.add(process); con.startBR(process); } // process.waitFor(); } catch (IOException e1) { e1.printStackTrace(); } if (con != null) con.Systemoutprintln("=== 実行終了 === (ALT+Wで閉じる)"); thread = null; } }