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?
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!