Получение строки состояния scp для отображения в окне Java - PullRequest
1 голос
/ 05 мая 2010

Я пишу программу, которая использует scp для копирования файлов в большую Java-программу. В настоящее время программа зависает, пока scp копирует файл, что может занять несколько минут, поэтому я хотел бы иметь возможность отображать ход выполнения scp или, по крайней мере, получить окно терминала с прогресс scp, чтобы показать! Есть предложения?

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Когда вы говорите "программа зависает", я предполагаю, что вы имеете в виду, что пользовательский интерфейс Swing зависает. Если это так, запустите scp в фоновом потоке и покажите пользователю неопределенный индикатор выполнения.

2 голосов
/ 05 мая 2010

scp пишет в STDOUT и сбрасывает вывод. Если вы передадите вывод, вы можете прочитать вывод из канала, но я предполагаю, что 1) scp не будет печатать индикатор выполнения в канал или 2) если вы можете сделать 1, вывод будет иметь смысл только если Вы повторно реализуете pty или аналогичный в окне Java.

Однако вы можете поэкспериментировать с ожидаемым модулем, вызывающим scp, и имитировать работу терминала, и вы сможете подделать scp, думая, что он работает как терминал.

Наконец, (и это, вероятно, лучший ответ), не используйте scp, найдите библиотеку java для импорта, которая напрямую ссылается на протоколы openssh для передачи файлов с помощью scp.

0 голосов
/ 05 мая 2010

Вызовите «scp запуска» с помощью SwingWorker, чтобы получить его из основного потока, и снова дайте обновиться GUI.

Чтобы получить реальный прогресс, вам нужно исследовать символы, напечатанные scp. Я считаю, что он поддерживает индикатор выполнения ASCII, который вы можете затем воспроизвести на Java. Вы можете добавить «-v» в scp, чтобы сделать его более разговорчивым.

...