2010-05-04 79 views
0

我正在编写一个程序,该程序使用scp在较大的java程序中复制文件。现在,程序冻结了,而scp正在复制文件,这可能需要几分钟的时间,所以我希望能够显示scp的进度,或者至少可以使用终端窗口scp进展显示!有什么建议么?将scp的状态栏显示在Java窗口中

+0

你如何启动scp? – 2010-05-05 00:15:25

回答

2

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

但是,您可以尝试使用期望模块调用scp并模仿终端的工作方式,并且您可能会假装scp认为其作为终端运行。

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

2

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

0

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

要获得实际进度,您需要调查由scp打印的字符。我相信它保持一个ASCII进度条,然后可以用Java进行复制。您可能想要将“-v”添加到scp,让它变得更健谈。