最近使用jsch中的ChannelShell,使用BufferedReader的readLine()方法读取返回结果,代码如下:
while ((line = dataIn.readLine()) != null){
stdout.add(line);
}
执行的时候,代码一直在while循环中,无法跳出该循环。
原因:
在代码中,使用的是ChannelShell,shell管道是交互模式的,并且调用的又是readLine()方法,此处使用read()方法也是一样的结果。当需要执行的命令全部执行完毕,但是远程机器并不知道已经执行完毕,仍然在等待着接收数据,所以readLine()方法就阻塞在那里了。
解决方法:
发送exit命令,告诉远程机器执行结束。