Я работаю над инструментом для подключения к удаленному серверу с помощью jcraft.JSch (ssh для сервера Unix) и возврата вывода и отображения его вывода (что-то вроде замазки, но я не заинтересован в Plink или любая сторонняя вещь). Код работает нормально, когда входные выходы каналов System.in
и System.out
, а программа представляет собой просто консольное Java-приложение. Но когда я пытаюсь использовать элементы управления SWT, возникла проблема, как описано в Как сопоставить System.out и System.in с элементами управления SWT
Итак, я считаю, что это кое-что из тегов INFO и ERR (с которыми я займусь позже), в любом случае я изменил подход. теперь я подаю команды через ввод текста SWT. он отлично работает для однолинейных выходов. но не для многострочного.
Код, который запускает соединение с оболочкой и отправляет команды, выглядит следующим образом.
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");
}
}
Когда я удаляю return в цикле while, диалоговое окно и eclipse (запускающее диалоговое окно) перестают отвечать, и я должен убить их обоих.
Любая помощь приветствуется, спасибо за ваше время.
shell
(в фоновом режиме) выполнить команду иexit
и отобразил результат в SWT ?. если так, я не могу этого сделать, потому что пользователь мог установить некоторые переменные среды или код возврата какой-либо предыдущей команды, который будет утерян, если я это сделаю. что я наблюдал безreturn
, так это то, что я могу читать все выходные строки, но как только это будет сделано. и когда я пытаюсь прочитать больше (с помощью dataIn.readLine ()), поток отладки исчезает, и окно eclipse (то, которое я отлаживаю) перестает отвечать. пожалуйста посоветуй. - person Nauduri Venkata Ravi Rama Sast   schedule 24.08.2015