Как добавить монитор прогресса при загрузке / выгрузке из / в sftp
Я пытаюсь добавить монитор прогресса в мою программу, чтобы увидеть процент выполнения операции загрузки или выгрузки с помощью сервера sftp. В частности, я хотел бы открыть новое окно (JFrame) и показать там% с именем обрабатываемого файла.
Для установления соединения я использую библиотеку Jsch. Я не могу понять, как и какую часть моего кода я должен изменить. Я пытался добавить монитор JProgress, но я не знаю, куда его вставить, потому что у меня есть цикл for. Я попытался вставить SwingWorker, но нашел только пример с System.out.println, а не "графический" способ. Вот часть моего кода:
public void connect(String host, String user, String pwd, int port) throws JSchException, SftpException, IOException {
try {
JSch jsch = new JSch();
session = jsch.getSession(user, host, port);
session.setPassword(pwd);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
} catch(JSchException | SftpException e) {
JOptionPane.showMessageDialog(null, "ERROR!");
JLabel label = new JLabel("ERROR! ");
contentPane.add(label, BorderLayout.NORTH);
System.out.println(e);
}
}
public void downloadFile() {
UIManager.put("ScrollPane.background", Color.BLACK);
UIManager.put("List.background", Color.WHITE);
UIManager.put("List.foreground", Color.BLACK);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
}
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("Browse the folder to process");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
path = new File(chooser.getSelectedFile().getAbsolutePath());
pathName = path.toString();
dwnPending =true;
for (ChannelSftp.LsEntry oListItem : list) { // Iterate objects in the list to get file/folder names.
currentFileDownload= oListItem.getFilename();
segnaLista = segnaLista - 1;
try {
sftpChannel.get("pub/example/" + currentFileDownload, pathName);
} catch (SftpException e) {
JOptionPane.showMessageDialog(null, "Impossible to download the file " + currentFilDownload+ ". SFTP error. The file will not be removed from the server");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null, "Impossibile to download file " + currentFilDownload);
}
dwnPending =false;
JOptionPane.showMessageDialog(null, "Download completed in: " + pathName);
}
}
Я хотел бы реализовать это максимально простым способом. Это только понять приблизительно, когда перевод будет завершен.