package istlab.KisoJikken; import java.awt.Dimension; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Stack; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; public class JTAConsole extends JTextArea implements Runnable, WindowListener, KeyListener { // static JTAConsole lastWindow; // static Point lastActivePoint; static Stack<JTAConsole> winStack = new Stack<JTAConsole>(); JFrame frame; Process process; Thread thread; InputStream instream; InputStreamReader isreader; BufferedReader reader; OutputStream outstream; // ProcessBuilder pb; // public JTAConsole(ProcessBuilder prob) { public JTAConsole(String title) { // pb = prob; frame = new JFrame(title); frame.getContentPane().add(new JScrollPane(this)); frame.setSize(500, 200); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.addWindowListener(this); if (winStack.size() > 0) { JTAConsole last = winStack.peek(); if (last.isVisible()) { Point lastFrameP = last.frame.getLocationOnScreen(); frame.setLocation(lastFrameP.x + 470, lastFrameP.y); } } else { if (Editor.lastOpened != null) { Point lastEditorP = Editor.lastOpened.getLocationOnScreen(); Dimension lastEditorD = Editor.lastOpened.getSize(); frame.setLocation(lastEditorP.x, lastEditorP.y + lastEditorD.height); } } addKeyListener(this); // if (lastActivePoint != null){ // frame.setLocation(lastActivePoint.x+500, lastActivePoint.y); // } else if (lastWindow != null && lastWindow.isVisible()){ // Point lastFrameP = lastWindow.frame.getLocationOnScreen(); // frame.setLocation(lastFrameP.x+500, lastFrameP.y); // } // lastWindow = this; winStack.push(this); } public void Systemoutprintln(String s) { append(s + "\n"); int len = getDocument().getLength(); setCaretPosition(len); } public void startBR(Process proc) { process = proc; try { reader = new BufferedReader(new InputStreamReader(proc.getInputStream(), "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } // isreader = new InputStreamReader(proc.getInputStream()); outstream = process.getOutputStream(); String line; try { // while(true){ // if (isreader.ready()){ // char[] buf = new char[1000]; // isreader.read(buf); // } // } while ((line = reader.readLine()) != null) { Systemoutprintln(line); } process.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } Systemoutprintln("=== end ==="); // thread = new Thread(this); // thread.start(); } @Override public void run() { String line; try { while ((line = reader.readLine()) != null) { Systemoutprintln(line); } } catch (IOException e) { e.printStackTrace(); } Systemoutprintln("=== end ==="); } public static void main(String[] arg) { ProcessBuilder processBuilder = new ProcessBuilder("ping", "localhost"); Process process = null; try { process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } JTAConsole con = new JTAConsole("Demo"); con.startBR(process); } @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { try { if (outstream != null) outstream.close(); if (instream != null) instream.close(); } catch (IOException e1) { e1.printStackTrace(); } process.destroyForcibly(); winStack.remove(this); setVisible(false); if (!process.isAlive()) { Launcher.allProcs.remove(process); } } @Override public void windowClosed(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowActivated(WindowEvent e) { // JTAConsole.lastActivePoint = frame.getLocationOnScreen(); } @Override public void windowDeactivated(WindowEvent e) { } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == 10) { sendLastLine(); } if (e.getKeyCode() > 64 && e.getKeyCode() < 64 + 32) { if (e.isControlDown()) { System.out.print("CTRL+"); } if (e.isAltDown()) { System.out.print("ALT+"); } if (e.isAltGraphDown()) { System.out.print("AltGraph+"); } if (e.isMetaDown()) { System.out.print("META+"); } System.out.println(KeyEvent.getKeyText(e.getKeyCode())); } if (e.isControlDown() || e.isAltDown() || e.isAltGraphDown() || e.isMetaDown()) { if (e.getKeyCode() == 67 || e.getKeyCode() == 68 || e.getKeyCode() == 87) { // CTRL+C or CTRL+D or Alt-W windowClosing(null); frame.dispose(); } } } private void sendLastLine() { int start; try { start = getLineStartOffset(getLineCount() - 1); int end = getLineEndOffset(getLineCount() - 1); String lastLineText = getText(start, end - start) + "\n"; // System.out.println(lastLineText); byte[] sbyte = lastLineText.getBytes(); outstream.write(sbyte); outstream.flush(); } catch (BadLocationException | IOException e) { e.printStackTrace(); } } @Override public void keyReleased(KeyEvent e) { } }