Pessoal, estou terminando o desenvolvimento de um aplicativo java desktop e estou com alguns problemas na implementacao da inicializacao e reinicializacao.
Na inicializacao, hoje tenho uma classe main que exibe um splash, carrega todos os meus servicos, threads, Pool de conexoes, log, etc… depois de carregar todos os servicos a classe main fecha o splash e exibe meu JFrame principal. Isso esta funcionando perfeitamente.
Agora estou precisando reinicializar o aplicativo em tempo de execucao e ainda nao cheguei a uma conclusao de como fazer isso. O processo é o mesmo de uma atualizacao de anti-virus, o aplicativo pega as atualizacoes e reinicializa. Alguem pode me dar uma ideia de como fazer isso ?
Dentro do seu programa tu pode colocar a verificação se existe uma nova versão em algum lugar (uma url por exemplo).
Se houver, execute um segundo programa (copiador) e feche a aplicação.
Este segundo programa recebeu como parâmetro:
local de origem da copia (uma url por exemplo)
local de destino (geralmente um diretorio)
command line para execução do programa apos a atualização.
Neste segundo programa deve ter um botão que o usuario clica e começa a cópia. Ao terminar a cópia, primeiro executa o programa que acabou de copiar e encerra a execução (do programa copiador).
Pronto!
PS: Considere a utilização de Java Web Start para atualizações de software.
public void restartApp()
{
Thread t = new Thread( new ClassePrincipalQueIniciaTudo() );
t.start();
instanciaVelhaDaClassePrincipalQueIniciaTudo.dispose();
}