Fez aquele programinha maroto pra faculdade e pra finalizar quer que ele seja aberto só clicando, sem ser preciso abrir um terminal e digitar "javaw Classe", mas nunca conseguiu fazer o jar executável? Continue lendo e você verá como é fácil.
Nesse artigo não explicarei tudo sobre jar, então se você quiser aprender mais sobre JAR use o Java Tutorials, esse tutorial é só pra quem quer criar um executável básico.
Vou partir do ponto que a máquina na qual vai rodar o jar, já tem o java instalado e configurado corretamente e que sua máquina também esteja configurada corretamente.
Levarei em conta também que você tem noções básicas de java.
Vou criar aqui uma pequena classe teste chamada Executavel, que exibe uma mensagem e encerra.
import javax.swing.JOptionPane;
import java.io.Console;
import java.io.IOException;
class Executavel{
public static void main(String arg[])throws IOException{
Console con;
if( (con = System.console()) == null){
JOptionPane.showMessageDialog(null,"Teste");
Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL java Executavel");//windows
}else{
con.format("Para ver isso eh preciso ter um console.\nConsole.format() Eh praticamente a mesma coisa que System.out.print().%n");
System.console().format("A diferenca eh que o format precisa de um console, precisa de uma instancia de console, enquanto System.out.print eh estatico e pode ser invocado diretamente.%n");
System.out.println("Press enter to continue...");
con.readLine();
System.exit(0);
}
}
}
Para criar o jar usamos um comando chamado "jar", no console digite "jar" e dê enter, você verá como se deve usar o comando e quais são os argumentos disponíveis, vamos usar os seguintes:
-c Cria um novo arquivo compactado.
-f Especifica o nome do jar
-m Especifica as informações do manifesto a partir de um arquivo de texto
-u atualiza jar existente
Para que nosso jar seja executável é preciso configurar o manifesto, e o que é manifesto? O manifesto contém as informações do jar, simples assim. Um manifesto bem simples chamado manifesto, salvo como texto.
Manifest-Version: 1.0
Created-By: Autor
Main-Class: Executavel
Explicação:
1ª linha: Versão do jar.
2ª linha: Quem criou
3ª linha: Classe que contém o método "main(String)", sem o .class.
Vale ressaltar um pequeno detalhe, a última linha deve ser sempre uma linha em branca, caso contrário não vai funcionar.
Vamos criar o jar, meus arquivos estão todas na mesma pasta, sintaxe:
jar cfm NomeDoJar.jar manifesto.txt Classe.class
Observe a sequencia dos argumentos, se fosse cmf a o resto deveria seguir a ordem: manifesto.txt NomeDoJar.jar Classe.class. O parâmetro "c" só indica que um jar será criado, mf indica que o primeiro parâmetro será o manifesto e o segundo o nome do jar.
Pronto executável criado, para atualizar utilize uf, sintaxe:
jar uf NomeDoJar.jar Classe.class
Se você atualizar uma classe de nome existente dentro do jar, ela será sobrescrita.
Um pouco mais sobre Console e Runtime.
Não sei o que é "rundll32 SHELL32.DLL,ShellExec_RunDLL", sei que sem isso não funciona.