package istlab.KisoJikken; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; public class CommandRunner implements Runnable { public static String prompt = "> "; String command; Thread thread; Process process; // JButton runB; String workingDir; int win_height = 200; public CommandRunner(String cmd) { command = cmd; workingDir = App.userhome + App.nwpsrc; // runB = rB; } public CommandRunner(String cmd, String chdir) { command = cmd; if (chdir==null){ workingDir = App.userhome + App.nwpsrc; } else { workingDir = chdir; } // runB = rB; } public CommandRunner(String cmd, String chdir, int winheight) { this(cmd, chdir); win_height = winheight; } public void startstop() { if (thread == null) { thread = new Thread(this); thread.start(); // runB.setText("Stop"); } else { process.destroyForcibly(); thread = null; // runB.setText("Run"); } } @Override public void run() { // Run script // System.out.println(scriptfile); List<String> cmds = Arrays.asList(command.split(" ")); ProcessBuilder processBuilder = new ProcessBuilder(cmds); // ProcessBuilder processBuilder = new ProcessBuilder("pwd"); processBuilder.directory(new File(workingDir)); // processBuilder.inheritIO(); JTAConsole con = new JTAConsole("(Exec) " + command, win_height); con.Systemoutprintln("=== 実行開始 ==="); if (workingDir.equals(App.userhome + App.nwpsrc)) { con.Systemoutprintln(prompt+"cd ~" + App.nwpsrc); } else { con.Systemoutprintln(prompt+"cd " + workingDir); } con.Systemoutprintln(prompt + command); try { process = processBuilder.start(); Launcher.allProcs.add(process); con.startBR(process); // BufferedReader reader = new BufferedReader(new // InputStreamReader(process.getInputStream())); // String line; // while ((line = reader.readLine()) != null) { // jta.append(line); // } process.waitFor(); } catch (IOException | InterruptedException e1) { e1.printStackTrace(); } con.Systemoutprintln("=== 終了 === (ALT+Wで閉じる)"); thread = null; // runB.setText("Run"); } }