shell.java

来自「java ftp 操作代码,程序可以直接运行」· Java 代码 · 共 265 行

JAVA
265
字号
package net.sf.jftp.tools;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.StreamTokenizer;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.text.DefaultCaret;import net.sf.jftp.gui.framework.HFrame;import net.sf.jftp.system.logging.Log;public class Shell extends HFrame implements Runnable{    BufferedOutputStream out;    //BufferedInputStream in;    BufferedReader in;    BufferedOutputStream err;    JTextArea text = new JTextArea(25, 101);    //JTextField input = new JTextField();    long off;    Thread runner;    JScrollPane textP;    String input = "";    Vector commands = new Vector();    int currCmd = 0;    public Shell(InputStream in, OutputStream out)    {        try        {        	this.in = new BufferedReader(new InputStreamReader(in));        	this.out = new BufferedOutputStream(out);        	//in = new BufferedInputStream(System.in);        	//out = new BufferedOutputStream(System.out);        	//err = new BufferedOutputStream(System.err);            init();        }        catch(Exception e)        {            e.printStackTrace();            Log.debug("ERROR: " + e.getMessage());        }    }        public Shell(BufferedReader in, OutputStream out)    {        try        {        	this.in = in;        	this.out = new BufferedOutputStream(out);        	//in = new BufferedInputStream(System.in);        	//out = new BufferedOutputStream(System.out);        	//err = new BufferedOutputStream(System.err);            init();        }        catch(Exception e)        {            e.printStackTrace();            Log.debug("ERROR: " + e.getMessage());        }    }        public void init() throws Exception    {        setTitle("Shell");        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        //setLocation(150, 150);        HFrame.fixLocation(this);        textP = new JScrollPane(text);        text.setFont(new Font("Monospaced", Font.TRUETYPE_FONT, 10));        getContentPane().setLayout(new BorderLayout(5, 5));        getContentPane().add("Center", textP);        //getContentPane().add("South", input);        text.setEditable(false);        setBackground(text.getBackground());                DefaultCaret c = new DefaultCaret();        c.setBlinkRate(1000);                text.setCaret(c);        text.setCaretColor(Color.BLACK);        c.setVisible(true);                text.setLineWrap(true);        text.addKeyListener(new KeyAdapter()            {                public void keyPressed(KeyEvent e)                {                    if((e.getKeyCode() == KeyEvent.VK_BACK_SPACE) &&                           (input.length() > 0))                    {                        input = input.substring(0, input.length() - 1);                        String t = text.getText();                        t = t.substring(0, t.length() - 1);                        text.setText(t);                    }                    else if(e.getKeyCode() == KeyEvent.VK_UP)                    {                        String t = text.getText();                        t = t.substring(0, t.length() - input.length());                        if((currCmd <= commands.size()) && (currCmd > 0))                        {                            currCmd--;                            String cmd = (String) commands.get(currCmd);                            input = cmd.substring(0, cmd.length() - 1);                            text.setText(t + input);                        }                    }                    else if(e.getKeyCode() == KeyEvent.VK_DOWN)                    {                        String t = text.getText();                        t = t.substring(0, t.length() - input.length());                        if(((currCmd + 1) < commands.size()) && (currCmd >= 0))                        {                            currCmd++;                            String cmd = (String) commands.get(currCmd);                            input = cmd.substring(0, cmd.length() - 1);                            text.setText(t + input);                        }                    }                    else if(e.getKeyCode() != KeyEvent.VK_SHIFT)                    {                        //Char c = new Char(e.getKeyChar());                        if(!e.isActionKey())                        {                            input += e.getKeyChar();                            text.append("" + e.getKeyChar());                        }                    }                    if(e.getKeyCode() == KeyEvent.VK_ENTER)                    {                        send();                    }                }            });        pack();        HFrame.fixLocation(this);        setVisible(true);        runner = new Thread(this);        runner.start();        toFront();        text.requestFocus();    }    public void run()    {        try        {            char[] b = new char[4096];            int i;            while((i = in.read(b,0,b.length)) != StreamTokenizer.TT_EOF)            {                text.append(new String(b, 0, i));                //Log.out("recv: "+i+" -> "+new String(b));                //while(err.available() > 0)                //{                //    err.read(b);                //    text.append(new String(b, 0, i));                //}                while(text.getRows() > 500)                {                    String t = text.getText();                    t = t.substring(250);                    text.setText(t);                   // text.setCaretPosition(-250);                }                try                {                    Thread.sleep(100);                }                catch(Exception ex)                {                    ex.printStackTrace();                }                JScrollBar bar = textP.getVerticalScrollBar();                bar.setValue(bar.getMaximum());               // text.setCaretPosition(i);                text.setCaretPosition(text.getText().length());                //text.getCaret().setDot(1);            }                        text.setEnabled(false);        }        catch(Exception ex)        {            ex.printStackTrace();            Log.debug("ERROR: " + ex.getMessage());            this.dispose();        }    }    private void send()    {        try        {            String msg = input;            input = "";            out.write(msg.getBytes());            out.flush();            commands.add(msg);            currCmd = commands.size();            //Log.out("send: "+msg);		        }        catch(IOException ex)        {            ex.printStackTrace();            Log.debug("ERROR: " + ex.getMessage());            this.dispose();        }    }    public static void main(String[] argv)    {    	try {    		Process p = Runtime.getRuntime().exec(argv.length > 0 ? argv[0] : "/bin/bash");       	    		new Shell(p.getInputStream(), p.getOutputStream());    	}    	catch(Exception ex) {    		ex.printStackTrace();    	}    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?