Pessoal, tenho um método que pega um arquivo .jar de uma pasta da rede e substitui na pasta raiz da máquina em execução, porém acredito que por estar na rede e pelo arquivo ter de 30 a 50mb está demorando cerca de 2 a 5 minutos a finalização da transferência.
Gostaria de implementar um JProgressBar que mostre ao usuário que a transferência está acontecendo (0 -> Tamanho do arquivo) e que é pra ele esperar e não para que ele não pense que o sistema esteja travado.
Podem me ajudar a implementar esse JProgressBar, abaixo metodos:
//Método que copia e substitui o arquivo jar
public static void copyFile(File source, File destination) throws IOException {
if (destination.exists()) {
destination.delete();
}
FileChannel sourceChannel = null;
FileChannel destinationChannel = null;
try {
sourceChannel = new FileInputStream(source).getChannel();
destinationChannel = new FileOutputStream(destination).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
} finally {
if (sourceChannel != null && sourceChannel.isOpen()) {
sourceChannel.close();
}
if (destinationChannel != null && destinationChannel.isOpen()) {
destinationChannel.close();
}
}
}
Aqui na inicialização do formulário chamo o método acima, acredito que deva ser aqui a implementação do JProgressBar:
public formUpdate() {
initComponents();
carregaVersao();
System.out.println("Começou");
worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
try {
//Thread.sleep(5000);
File source = new File(ORIGEM);
File destination = new File(APP_PATCH + "\\PCP.jar");
copyFile(source, destination);
} catch (IOException ex) {
Logger.getLogger(formUpdate.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public void done() {
try {
System.out.println("Finalizou a atualização");
java.awt.Desktop.getDesktop().open(new File(APP_PATCH + "\\PCP.jar"));//Abre o Updater
worker.cancel(true);
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(formUpdate.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
worker.execute();
}
