Pessoal, boa tarde!
Devido meu sistema rodar em Windows e Linux, desenvolvi um atualizador para facilitar a vida do usuário quando houver atualizações do sistema.
Como funciona:
O usuário inicia o sistema, insere o usuário e senha e faz login.
Após isso a aplicação verifica se o usuário está usando a versão mais atualizada do sistema.
Se não, o sistema mostra uma mensagem pedindo a atualização. Se usuário clicar no sim, automaticamente o sistema é finalizado, é executado o atualizador e o atualizador faz a instalação/atualização.
É aí que está o "problema": o sistema fica esperando o atualizador terminar o processo de instalação para ser finalizado.
Isso para mim não é nem um pouco interessante, pois não há como o atualizador sobrescrever o JAR do sistema se ele está em execução, esperando o atualizador terminar a instalação.
Abaixo o código que estou usando.
class IniciaAtualizacao implements Runnable{
public void run() {
try {
Runtime.getRuntime().exec( System.getProperty("java.home")+ "/bin/java -jar \"" + System.getProperty("user.dir") + "/atualizador.jar\"");
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void verificaAtualizacao(){
Date dataBD = resultado.getDate("dataSistema");
Date dataES = formatBR.parse(dataVersao);
if (!dataBD.equals(dataES)) {
boolean b = Mensagens.mostraConfirmacao(
"<html>Há uma versão mais atualizada do sistema disponível para download.<br>Isso é ótimo! A cada nova atualização o sistema fica mais rápido,<br>seguro, intuitivo e inteligente.<br>O procedimento de atualização é obrigatório.<br><br>Deseja que o sistema lhe redirecione para o endereço de download<br>da versão mais atualizada, agora?<html>");
if (b == true) {
IniciaAtualizacao inicia = new IniciaAtualizacao();
Thread t = new Thread(inicia);
t.start();
System.exit(0);
}
}
}
Procurei material a respeito, mas não achei nada.
Obrigado!