我正在开发一个工具来使用jcraft.JSch(ssh 到 Unix 服务器)连接到远程服务器并返回输出并显示其输出(类似于 putty,但我不热衷于 Plink 或任何第三方的东西)。当通道输入输出为System.in
并且System.out
程序只是一个控制台 java 应用程序时,该代码工作正常。但是当我尝试使用 SWT 控件时,它遇到了问题,如如何将 System.out 和 System.in 映射到 SWT 控件中所述
所以,我相信它与 INFO 和 ERR 标记无关(我稍后会处理),无论如何我改变了方法。现在我通过 SWT 文本输入提供命令。它适用于单线输出。但不适用于多线。
触发与 shell 的连接并发送命令的代码如下。
public void widgetSelected(SelectionEvent e) {
String command=CmdText.getText();
System.out.println("runButton.widgetSelected:Command Obtained by buton is:"+command);
if ( command.equals("") )
{
MessageDialog.openInformation(dialogShell,"Information","Please Eneter a Command!");
return;
}
else if (command.contains("@"))
{
channel=CommandHandler.openshell();
LogText.append("Connected to - :"+command+"\n>");
}
else
{
LogText.append(command+"\n");
String outputstring="";
try
{
BufferedReader dataIn = new BufferedReader(new InputStreamReader(channel.getInputStream()));
DataOutputStream dataOut = new DataOutputStream(channel.getOutputStream());
dataOut.writeBytes(command+"\n");
dataOut.flush();
String line="";
outputstring=""+line;
while ( line != null) {
try
{
line = dataIn.readLine();
line = dataIn.readLine();
LogText.append("<CommandResult>:"+line+"\n");
return;
}
catch (IOException e1) { B24IDEConsole.WriteLog("RemoteCall.connect_execute", e1.getMessage()); }
outputstring=outputstring+line;
}
}
catch(Exception e1){ B24IDEConsole.WriteLog("RemoteCall.connect_execute", e1.getMessage()); }
LogText.append("<EndOfCommand>:"+outputstring+"\n");
}
}
当我在 while 循环中删除return时,对话框和eclipse(触发对话框)变得无响应,我必须将它们都杀死。
感谢您的帮助,感谢您的宝贵时间。