让scp的状态栏出现在Java窗口中

时间:2010-05-04 23:56:16

标签: java progress-bar scp

我正在编写一个程序,它使用scp在更大的java程序中复制文件。就像现在一样,程序在scp复制文件时冻结,这可能需要几分钟,所以我希望能够显示scp的进度,或者至少得到终端窗口scp进展出现了!有什么建议吗?

3 个答案:

答案 0 :(得分:2)

scp写入STDOUT并刷新输出。如果管道输出,你可能能够读取管道的输出,但我的猜测是1)scp不会将进度条打印到管道或2)如果你可以做1,输出只有在你在java窗口中重新实现了pty或类似的东西。

但是,您可以尝试使用类似于期望的模块来调用scp并模仿终端的工作方式,并且您可以假设scp认为它是作为终端运行的。

最后,(这可能是最好的答案),不要使用scp,找到一个直接链接到openssh协议的java库,用于使用scp传输文件。

答案 1 :(得分:2)

当你说“程序冻结”时,我的猜测是你的意思是Swing UI冻结了。如果是这样,请在后台线程中启动scp并向用户显示一个不确定的进度条。

答案 2 :(得分:0)

使用SwingWorker调用“启动scp”以获取主线程并让GUI再次更新。

要获得实际进度,您需要调查scp打印的字符。我相信它维护了一个ASCII进度条,然后你可以用Java复制。您可能需要在scp中添加“-v”以使其更具说服力。