Olá. Eu gostaria de criar um sistema de atualização. Queria que a cada vez que meu programa iniciasse, ele procurasse por atualizações. Bem, é um sistema bem simples. Mas o que eu tô meio perdido é a atualização mesmo. Seria possível eu baixar o .jar, e sobrescrever ele enquanto o mesmo está sendo executado? Eu teria que criar outro projeto? Alguém tem algum exemplo ou pode me explicar como eu faço isso?
Alguém pode me dar um exemplo de um sistema de atualização?
6 Respostas
Não entendi?
Sabe quando uma aplicação inicia e ela diz que tem uma atualização? Algumas baixo dentro da aplicação, outras direcionam para um site, outras atualização sem notificar o usuário. É isso que eu quero fazer. Eu quero exibir uma mensagem para o usuário que existe uma nova versão, e baixar e atualizar caso ele clique em sim.
Entendi, se fosse C# eu já ia te explicar, mas, Java vamos aguardar os nossos especialistas!
Olá! Bom, você pode fazer da seguinte maneira: Serão 2 arquivos jar, um será o launcher e o outro o principal, agora eu vou dar um exemplo que eu mesmo uso, você usa um serviço de hospedagem que deve conter um arquivo XML de nome qualquer. Exemplo: update.xml que conterá as informações de versao. Ex:
<configuration>
<version>0.2</version>
<updateMSG>Yay! Nova versao!</updateMSG>
<configuration>
Será nescessário um arquivo update.xml no seu projeto também!!!
E como é feito? Simples! Você pode usar um InputStream que recebe um URL e utilizando um StringBuffer com um loop while é possivel adicionar todo o conteudo do arquivo de texto xml numa string. Depois é só usar algumas habilidades de manipulação de string e pegar as partes que lhe interessam.
Agora a 2° parte, sobre o seu arquivo XML do projeto ele deve ter um esquema similar ao da hospedagem para comparação, usando o DOM do java você lê as informações do arquivo XML e adiciona elas a uma string, depois é só comparar as 2 strings com equalsIgnoreCase
se for igual ele executa seu programa normalmente, se for diferente ele baixa um arquivo substituindo o .jar principal e nao o launcher! Lembre-se de usar o DOM depois da atualização para sobrescrever o arquivo XML local para que mesmo depois de ter atualizado ele não ficar baixando a versao mais recente ;).
Espero ter ajudado, se precisar de ajuda é só me pedir que eu escrevo um programa de demonstração para você!
Valeu pela idéia, esse negócio de ter um lancher é genial. Eu só vou ter um arquivo txt no Github e na pasta do programa para comparar as versões, isso é fácil. Caso o programa precise ser atualizado, o lancher deve atualiza-lo e só depois abri-lo certo? Caso contrário, abri-lo direto certo? Valeu pela idéia.
É assim mesmo! Olha só isso que encontrei pesquisando
String[] run = {"java","-jar","alguma_pasta/seujarprincipal.jar"};
try {
Runtime.getRuntime().exec(run);
} catch (Exception ex) {
ex.printStackTrace();
}
System.exit(0);
Você pode usar isso no fim da execução do launcher (depois de ele atualizar) e o programa atualizado abre direto após a atualização!