Java中非常基本的终端

Java中非常基本的终端,java,swing,ssh,terminal,Java,Swing,Ssh,Terminal,我需要从Java应用程序(在windows和linux上运行)到SSH服务器执行5-10个命令,并在JFrame中显示这些命令的输出。输出可以是数千行。 我选择Ganymed SSH进行SSH通信,并执行startShell()方法,该方法为我提供登录消息和上次登录信息,但当我尝试写入OutputStream时,它不起作用 下一行输出上次登录和操作系统信息: while((line = outputReader.readLine()) != null){ System.out.

我需要从Java应用程序(在windows和linux上运行)到SSH服务器执行5-10个命令,并在JFrame中显示这些命令的输出。输出可以是数千行。 我选择Ganymed SSH进行SSH通信,并执行startShell()方法,该方法为我提供登录消息和上次登录信息,但当我尝试写入OutputStream时,它不起作用

下一行输出上次登录和操作系统信息:

 while((line = outputReader.readLine()) != null){
        System.out.println(line);
    }
但是,以下代码似乎没有按预期工作:

OutputStream inputToShell = (shellSession.getStdin());
inputToShell.write(b);

我需要实现终端逻辑吗?如果是这样的话,我只需要执行一些命令,然后向用户显示输出,如何继续?

我的建议是在Ganymed SSH库周围创建一个简单的Java包装器,它接受Java的stdin并将其输出到Shell的stdin,还将Shell的stdout和stderr传输到Java的等价物。通过这种方式,您可以测试如何使用库以及以何种顺序发送哪些命令等

例如:

public static void main(String[] args) {
  final ShellSession shellSession = ...

  Thread input = new Thread() {
    @Override public void run() {
      byte[] buffer = new byte[1024];
      while(!shellSession.isClosed()) {
        int read = System.in.read(buffer);
        shellSession.getInputStream().write(buffer, read);
      }
    }
  }

  Thread output = ...
  Thread error = ...

  input.start();
  output.start();
  error.start();

}

我的建议是围绕Ganymed SSH库创建一个简单的Java包装器,它接受Java的stdin并将其输出到Shell的stdin,还将Shell的stdout和stderr通过管道传输到Java的等价物。通过这种方式,您可以测试如何使用库以及以何种顺序发送哪些命令等

例如:

public static void main(String[] args) {
  final ShellSession shellSession = ...

  Thread input = new Thread() {
    @Override public void run() {
      byte[] buffer = new byte[1024];
      while(!shellSession.isClosed()) {
        int read = System.in.read(buffer);
        shellSession.getInputStream().write(buffer, read);
      }
    }
  }

  Thread output = ...
  Thread error = ...

  input.start();
  output.start();
  error.start();

}

你用命令发送了换行吗?如果没有它,终端将无法处理其
stdin
。您是否用命令发送了换行符?如果没有它,终端将无法处理其
stdin
。。。