Java中的Very Basic终端

时间:2011-10-06 03:44:16

标签: java swing ssh terminal

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

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

 while((line = outputReader.readLine()) != null){
        System.out.println(line);
    }

但是,以下代码似乎没有按预期工作:

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

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

1 个答案:

答案 0 :(得分:3)

我的建议是围绕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();

}