diff --git a/src/main/java/istlab/KisoJikken/CommandRunner.java b/src/main/java/istlab/KisoJikken/CommandRunner.java new file mode 100644 index 0000000..0053cc0 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/CommandRunner.java @@ -0,0 +1,66 @@ +package istlab.KisoJikken; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class CommandRunner implements Runnable { + String command; + + Thread thread; + Process process; + // JButton runB; + + public CommandRunner(String cmd) { + command = cmd; + // runB = rB; + } + + public void startstop() { + if (thread == null) { + thread = new Thread(this); + thread.start(); + // runB.setText("Stop"); + } else { + process.destroy(); + thread = null; + // runB.setText("Run"); + } + } + + @Override + public void run() { + // Run script + // System.out.println(scriptfile); + List cmds = Arrays.asList(command.split(" ")); + ProcessBuilder processBuilder = new ProcessBuilder(cmds); + // ProcessBuilder processBuilder = new ProcessBuilder("pwd"); + processBuilder.directory(new File(App.userhome + App.nwpsrc)); + // processBuilder.inheritIO(); + JTAConsole con = new JTAConsole("(Exec) " + command); + con.Systemoutprintln("== 実行開始 =="); + con.Systemoutprintln("> cd ~" + App.nwpsrc); + con.Systemoutprintln("> "+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("== 終了 =="); + thread = null; + // runB.setText("Run"); + } + +} diff --git a/src/main/java/istlab/KisoJikken/Editor.java b/src/main/java/istlab/KisoJikken/Editor.java index ba2a2ad..d631eb8 100644 --- a/src/main/java/istlab/KisoJikken/Editor.java +++ b/src/main/java/istlab/KisoJikken/Editor.java @@ -1,10 +1,14 @@ package istlab.KisoJikken; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; @@ -22,6 +26,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; +import javax.swing.JTextField; import javax.swing.WindowConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -41,6 +46,7 @@ JButton runB; // for ShellScript JButton compileB; JButton execB; + JTextField comlineOption; ScriptRunner runner; public Editor(File f) { @@ -63,6 +69,7 @@ load(); topP = new JPanel(); + topP.setLayout(new FlowLayout(FlowLayout.CENTER, 0,2)); topP.add(new JLabel("size:")); fontSizeJS = new JSlider(10, 50, 16); topP.add(fontSizeJS); @@ -84,7 +91,7 @@ } else if (file.getName().endsWith(".sh")) { textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_UNIX_SHELL); topP.add(saveB); - } else if (file.getName().endsWith(".class")){ + } else if (file.getName().endsWith(".class")) { textArea.setEditable(false); } else { // txt fileなど topP.add(saveB); @@ -94,19 +101,40 @@ loadB.addActionListener(this); topP.add(loadB); - //実行ボタン - if (textArea.getSyntaxEditingStyle()==SyntaxConstants.SYNTAX_STYLE_UNIX_SHELL){ + // 実行ボタン + if (textArea.getSyntaxEditingStyle() == SyntaxConstants.SYNTAX_STYLE_UNIX_SHELL) { runB = new JButton("Run"); runB.addActionListener(this); topP.add(runB); runner = new ScriptRunner(file.getAbsolutePath(), runB); - } else if (textArea.getSyntaxEditingStyle()==SyntaxConstants.SYNTAX_STYLE_JAVA){ + } else if (textArea.getSyntaxEditingStyle() == SyntaxConstants.SYNTAX_STYLE_JAVA) { compileB = new JButton("Compile"); execB = new JButton("Exec"); compileB.addActionListener(this); execB.addActionListener(this); topP.add(compileB); topP.add(execB); + comlineOption = new JTextField("arg1 arg2 ...", 15); + comlineOption.setForeground(Color.GRAY); + comlineOption.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + if (comlineOption.getText().equals("arg1 arg2 ...")) { + comlineOption.setText(""); + comlineOption.setForeground(Color.BLACK); + } + } + + @Override + public void focusLost(FocusEvent e) { + if (comlineOption.getText().isEmpty()) { + comlineOption.setForeground(Color.GRAY); + comlineOption.setText("arg1 arg2 ..."); + } + } + }); + + topP.add(comlineOption); } getContentPane().add(topP, BorderLayout.NORTH); @@ -125,9 +153,9 @@ } catch (FileNotFoundException e) { e.printStackTrace(); } - BufferedReader br=null; + BufferedReader br = null; try { - br = new BufferedReader(new InputStreamReader(is,"UTF-8")); + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } @@ -172,7 +200,7 @@ } else if (e.getActionCommand().equals("Compile")) { new JCompiler(file.getAbsolutePath()); } else if (e.getActionCommand().equals("Exec")) { - new JExecutor(file.getAbsolutePath()); + new JExecutor(file.getAbsolutePath(), comlineOption.getText()); } } @@ -198,7 +226,6 @@ @Override public void keyReleased(KeyEvent e) { - // TODO Auto-generated method stub } } diff --git a/src/main/java/istlab/KisoJikken/JExecutor.java b/src/main/java/istlab/KisoJikken/JExecutor.java index e26cbf9..c4fcbbd 100644 --- a/src/main/java/istlab/KisoJikken/JExecutor.java +++ b/src/main/java/istlab/KisoJikken/JExecutor.java @@ -2,20 +2,26 @@ 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) { + 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("\\")){ + if (File.separator.equals("\\")) { ary = absolutePath.split("\\\\"); } else { ary = absolutePath.split(File.separator); @@ -32,10 +38,15 @@ @Override public void run() { - ProcessBuilder processBuilder = new ProcessBuilder("java", - pkgname + "." + javafname); + ArrayList comlist = new ArrayList(); + comlist.add("java"); + comlist.add(pkgname + "." + javafname); + String[] split = commandLineOption.split(" "); + for(int i=0;i cd ~" + App.nwpsrc); con.Systemoutprintln("> java " + pkgname + "." + javafname); diff --git a/src/main/java/istlab/KisoJikken/Launcher.java b/src/main/java/istlab/KisoJikken/Launcher.java index 5dc6fed..5bb3e3a 100644 --- a/src/main/java/istlab/KisoJikken/Launcher.java +++ b/src/main/java/istlab/KisoJikken/Launcher.java @@ -1,7 +1,7 @@ package istlab.KisoJikken; -import java.awt.Desktop; import java.awt.BorderLayout; +import java.awt.Desktop; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -110,6 +110,10 @@ mi.addActionListener(ae -> openExecPath()); menu.add(mi); + mi = new JMenuItem("exit"); + mi.addActionListener(ae -> System.exit(0)); + menu.add(mi); + menu = new JMenu("File"); menuBar.add(menu); @@ -132,12 +136,24 @@ mi.addActionListener(ae -> stopProcess(true) ); menu.add(mi); + mi = new JMenuItem("jps"); + mi.addActionListener(ae -> runCommand(ae.getActionCommand()) ); + menu.add(mi); + + mi = new JMenuItem("killall java"); + mi.addActionListener(ae -> runCommand(ae.getActionCommand()) ); + menu.add(mi); + setJMenuBar(menuBar); // getContentPane().add(mainP, BorderLayout.WEST); setSize(400, 600); } + public void runCommand(String cmd){ + System.out.println(cmd); + new CommandRunner(cmd).startstop(); + } public void stopProcess(boolean isAll){ ArrayList toberemoved = new ArrayList(); for(Process proc : allProcs){