获取scp';在Java窗口中显示的状态栏

获取scp';在Java窗口中显示的状态栏,java,progress-bar,scp,Java,Progress Bar,Scp,我正在编写一个程序,它使用scp在一个更大的java程序中复制文件。现在,程序在scp复制文件时冻结,这可能需要几分钟的时间,因此我希望能够显示scp的进度,或者至少显示带有scp进度的终端窗口!有什么建议吗?scp写入标准输出并刷新输出。如果你通过管道输出,你可能可以从管道中读取输出,但我的猜测是1)scp不会将进度条打印到管道中,或者2)如果你能做到1,那么只有在java窗口中重新实现pty或类似工具时,输出才有意义 然而,您可以尝试使用一个expect-like模块调用scp,并模拟终端的

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

scp
写入标准输出并刷新输出。如果你通过管道输出,你可能可以从管道中读取输出,但我的猜测是1)scp不会将进度条打印到管道中,或者2)如果你能做到1,那么只有在java窗口中重新实现pty或类似工具时,输出才有意义

然而,您可以尝试使用一个expect-like模块调用scp,并模拟终端的工作方式,您可能会假装scp将其作为终端运行


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

scp
写入标准输出并刷新输出。如果你通过管道输出,你可能可以从管道中读取输出,但我的猜测是1)scp不会将进度条打印到管道中,或者2)如果你能做到1,那么只有在java窗口中重新实现pty或类似工具时,输出才有意义

然而,您可以尝试使用一个expect-like模块调用scp,并模拟终端的工作方式,您可能会假装scp将其作为终端运行

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

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

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

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

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

使用SwingWorker调用“启动scp”,使其脱离主线程,并让GUI再次更新

要获得实际进度,您需要调查scp打印的字符。我相信它维护了一个ASCII进度条,您可以在Java中进行复制。您可能希望在scp中添加“-v”,使其更健谈