1

scp を使用してより大きな Java プログラムでファイルをコピーするプログラムを作成しています。現状では、scp がファイルをコピーしている間にプログラムがフリーズします。これには数分かかることがあります。そのため、scp の進行状況を表示できるようにするか、少なくともターミナル ウィンドウを表示できるようにしたいと考えています。 SCP進行状況が表示されます!助言がありますか?

4

3 に答える 3

2

「プログラムがフリーズする」と言うとき、私の推測では、Swing UI がフリーズするという意味です。その場合は、バックグラウンド スレッドで scp を起動し、不確定な進行状況バーをユーザーに表示します。

于 2010-05-05T01:30:10.410 に答える
2

scpSTDOUT に書き込み、出力をフラッシュします。出力をパイプすると、パイプから出力を読み取ることができるかもしれませんが、私の推測では、1) scp は進行状況バーをパイプに出力しないか、2) 1 を実行できる場合、出力は次の場合にのみ意味があります。 Javaウィンドウでptyなどを再実装します。

ただし、expect のようなモジュールを呼び出して scp を試してみて、ターミナルの動作を模倣することもできます。また、scp を偽って、ターミナルとして実行されていると思わせることができる場合もあります。

最後に (これがおそらく最良の答えです)、scp を使用しないでください。scp でファイルを転送するための openssh のプロトコルに直接リンクする Java ライブラリを見つけてインポートします。

于 2010-05-05T00:16:58.537 に答える
0

SwingWorker を使用して "launch scp" を呼び出してメイン スレッドから取得し、GUI を再度更新します。

実際の進行状況を把握するには、scp によって出力される文字を調査する必要があります。ASCIIプログレスバーを維持していると思います。その後、Javaで複製できます。scp に "-v" を追加して、より話しやすくすることができます。

于 2010-05-05T08:02:07.827 に答える