Java 使用小程序向unix计算机发送tab键事件

Java 使用小程序向unix计算机发送tab键事件,java,unix,ssh,applet,Java,Unix,Ssh,Applet,我有一个小程序,可以与远程unix计算机交互。一切正常。我正在遵循ganymede ssh代码。下面是代码摘录 session = CLIUtil.createTerminal(); if (session != null) { in = session.getStdout(); out = session.getStdin(); thread = new RemoteThread(); thread.start(); p

我有一个小程序,可以与远程unix计算机交互。一切正常。我正在遵循ganymede ssh代码。下面是代码摘录

session = CLIUtil.createTerminal();
if (session != null) {
        in = session.getStdout();
        out = session.getStdin();

        thread = new RemoteThread();
        thread.start();
    public void keyPressed(KeyEvent key) {
    int keyCode = key.getKeyCode();
    try {
          else if (keyCode == KeyEvent.VK_L && ctrlMask)
        {
            cmd = CLIConstants.CLEAR_COMMAND;
            out.write(new String(cmd + "\n").getBytes());
        }
        else if ((keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z && !ctrlMask) ||
                (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 && !ctrlMask) ||
                keyCode == KeyEvent.VK_QUOTE || keyCode == KeyEvent.VK_MINUS ||
                keyCode == KeyEvent.VK_PERIOD || keyCode == KeyEvent.VK_SLASH ||
                keyCode == KeyEvent.VK_BACK_SLASH || keyCode == KeyEvent.VK_SPACE)
        {

            int cursorPosition = terminalArea.getCaretPosition();
            System.out.println("Cursor Position = " + cursorPosition);
            terminalArea.append("" + key.getKeyChar());
            cmd = cmd + key.getKeyChar();
            terminalArea.setCaretPosition(cursorPosition + 1);
        }
        else if (keyCode == KeyEvent.VK_ENTER)
        {
            try {
                out.write(new String(cmd + "\n").getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
       }
 }

class RemoteThread extends Thread {
    int x = 100;

    int y = 3000;

    char[][] lines = new char[y][];

    int posy = 0;

    int posx = 0;

    @Override
    public void run() {
        try {
            while (true) {
                byte[] buff = new byte[8192];
                int len = in.read(buff);
                if (len != -1) {
                    addTextToTerminal(buff, len);
                    if (cmd.startsWith(CLIConstants.CLEAR_COMMAND))
                        out.write("\n".getBytes());
                    cmd = "";
                } else {
                    CLIUtil.terminateConnection();
                }
public void addTextToTerminal(byte[] buff, int len) {
        if (cmd.startsWith(CLIConstants.CLEAR_COMMAND)) {
            try {
                lines = null;
                posx = posy = 0;
                while (in.available() <= 10)
                    ;
                while (in.available() > 0) {
                    in.skip(in.available());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return;
        }

        if (lines == null)
            lines = new char[y][];

        for (int i = 0; i < len; i++) {
            char c = (char) (buff[i]);

            // Backspace key
            if (c == '\b') {
                if (posx < 0)
                    continue;
                posx--;
                continue;
            }

            // Carriage Return
            if (c == '\r') {
                posx = 0;
                continue;
            }

            // New Line
            if (c == '\n') {
                posy++;
                if (posy >= y) {
                    for (int k = 1; k < y; k++)
                        lines[k - 1] = lines[k];
                    posy--;
                    lines[y - 1] = new char[x];
                    for (int k = 0; k < x; k++)
                        lines[y - 1][k] = ' ';
                }
                continue;
            }

            // Special Characters
            if (c < 32) {
                continue;
            }

            if (posx >= x) {
                posx = 0;
                posy++;
                if (posy >= y) {
                    posy--;
                    for (int k = 1; k < y; k++)
                        lines[k - 1] = lines[k];
                    lines[y - 1] = new char[x];
                    for (int k = 0; k < x; k++)
                        lines[y - 1][k] = ' ';
                }
            }

            if (lines[posy] == null) {
                lines[posy] = new char[x];
                for (int k = 0; k < x; k++)
                    lines[posy][k] = ' ';
            }
            lines[posy][posx] = c;
            posx++;
        }
        StringBuffer sb = new StringBuffer(x * y);
        for (int i = 0; i < lines.length; i++) {
            if (i != 0)
                sb.append('\n');
            if (lines[i] != null) {
                sb.append(lines[i]);
            }
        }

        String text = sb.toString().trim();
        terminalArea.setText(text + " ");
        terminalArea.setCaretPosition(((x-1) * 100) + y);
        terminalArea.repaint();
    }
}
有什么帮助吗?提前谢谢

我找到了

拜访

只需执行out.write((您的输入+“\t”).getbytes();向shell发送一个tab键事件,它的工作方式与unix中的正常自动完成类似

            if(keyCode == KeyEvent.VK_TAB){
            String temp = new String();
            System.out.println("tab key event");
            terminalArea.setFocusTraversalKeysEnabled(false);
            //split_string(cmd);
            out.write(); ?????

        }