Olá!
Estou criando um *.jar e quando clico duas vezes no programa, ele não executa direito.
Onde está o erro?
.
.
.
javac Window.java
jar cvfm Window.jar manifest.txt *.class *.png
.
.
.
Arquivo: manifest.txt
.
.
Main-Class: Window
Name: Window.class
Created-By: Iatagan Cursos
.
.
.
.
.
identar texto pré-formatado por 4 espaços
public class Window {
public WindowPrincipal frame;
public void Window(){
frame = new WindowPrincipal();
frame._WindowPrincipal();
}
public static void main(String[] args) {
Window jx = new Window();
jx.Window();
}
}
Se eu não me engano, o Manifest deve seguir o seguinte layout:
Manifest-Version: 1.0
Class-Path: [libs]
Created-By: [versao jre] (Oracle Corporation)
Main-Class: pacote.ClasseMain
<<linha em branco>>
Daí eu faço (estando no diretório raiz):
jar cvfm pacote\nomeDoJar.jar pacote\nomeArquivoManifesto.txt pacoteImg\nomefigura.[
png, jpg, gif, etc.] pacote\ClasseMain.class pacote\Classe1.class
pacote\Classe2.class pacote\ClasseN.class
ou
jar cvfm pacote\nomeDoJar.jar pacote\nomeArquivoManifesto.txt @pacoteImg\imagens.txt
@pacote\classes.txt
Adaptado de: Docs Oracle - Creating JAR File
Seu código tem erros
Pelo exemplo é difícil!
Faz o código para mim?
O arquivo manifest.txt tem como classe Window.class
Está gerando um erro no manifest.txt e vi que ele não está executando quando clico nele!
.
.
Manifest-Version: 1.0
Class-Path:
Created-By: 14.0 (Oracle Corporation)
Main-Class: Project.Window
Se você não tem bibliotecas a serem ‘vinculadas’ ao projeto, o campo Class-Path pode ser apagado.
1 - Abra um documento de texto (.txt
) com o nome que queira.
2 - Indique a versão do manifesto na primeira linha: Manifest-Version: 1.0
.
3 - Na segunda linha, indique o criador: Versão do seu JDK (Oracle Corporation)
->
a versão mais recente do JDK é a 13, logo não pode ser 14. Além disso tem que ser a que tu tens instalado na sua máquina.
4 - Na terceira linha, indique a classe de entrada aquela que tem o método main
.
5 - Na quarta linha, adicione um espaço em branco para definir o EOF (End-of-File).
Observação: o arquivo deve ser codificado em UTF-8.
Para mais detalhes, consulte: Docs Oracle - Java Tutorials, Understanding the Default Manifest.
Exemplo:
Estou usando uma versão do javac abaixo. Qual a melhor versão e como é que desinstá-lo no Linux?
computador@computador-desktop:~/java$ javac -version
javac 14-ea
computador@computador-desktop:~/java$
Eu uso o comando java -version
ou javac -version
(Windows/Linux). De acordo com a Oracle (que mantém o Java), a última versão do JDK é a 13.0.1., como pode ser visto aqui: Oracle Java - Java Platform (JDK) 13. Então, eu não sei porque a sua está aparecendo como 14-ea. Como está mapeado nas variáveis de ambiente no Linux?
Auxílio: Usando o Compilador Java (javac) no Linux.
Me ajude? Não estou conseguindo?
Quero quando clica nele, ele executa um programa criado por mim!
iatagan.website/exemplo/Window.zip
Mude o manifest.txt para mim?
Então, mas se tu está fazendo na ‘unha’ e não usando um IDE é porque quer aprender certo? Então, se eu fizer para você do que vai adiantar tudo isso? Vamos por partes.
1 - Como você configurou o JDK no Linux? Qual versão está ‘mapeada’ nas variáveis de ambiente? (depois de respondido isso passemos para a próxima fase)
Exemplo:
1 - Classe Fábrica
public class Fabrica {
private int codigoFabrica;
private String nomeFabrica;
/*
* Métodos acessores e modificadores
*/
public void setCodigoFabrica(int codigoFabrica){
this.codigoFabrica = codigoFabrica;
}
public int getCodigoFabrica(){
return codigoFabrica;
}
public void setNomeFabrica(String nomeFabrica){
this.nomeFabrica = nomeFabrica;
}
public String getNomeFabrica(){
return nomeFabrica;
}
}
2 - Classe Modelo
public class Modelo {
private int codigoModelo;
private String nomeModelo;
private Fabrica fabrica;
/*
* Métodos acessores e modificadores
*/
public void setCodigoModelo(int codigoModelo){
this.codigoModelo = codigoModelo;
}
public int getCodigoModelo(){
return codigoModelo;
}
public void setNomeModelo(String nomeModelo){
this.nomeModelo = nomeModelo;
}
public String getNomeModelo(){
return nomeModelo;
}
public void setFabrica(Fabrica fabrica){
this.fabrica = fabrica;
}
public Fabrica getFabrica(){
return fabrica;
}
}
3 - Classe CombEncadeado
import java.awt.BorderLayout;
import java.util.List;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.UIManager;
public class ComboEncadeado extends JFrame {
private List<Fabrica> fabricas = new ArrayList<>();
private List<Modelo> modelos = new ArrayList<>();
private List<Modelo> modelosEncontrados = new ArrayList<>();
public ComboEncadeado(){
setTitle("Combobox Encadeado");
configurarLayout();
retornarFabricas();
retornarModelos();
carregarFabrica();
}
private void configurarLayout(){
setIconImage(new ImageIcon(getClass().getResource("/img/favicon.png")).getImage());
layoutDeBorda = new BorderLayout(5, 5);
setLayout(layoutDeBorda);
cbxFabrica = new JComboBox<>();
cbxModelo = new JComboBox<>();
add(cbxFabrica, BorderLayout.NORTH);
add(cbxModelo, BorderLayout.CENTER);
cbxFabrica.addItemListener(
new java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evento){
cbxFabricaItemStateChanged(evento);
}
}
);
}
private void retornarFabricas(){
//List<Fabrica> fabricas = new ArrayList<>();
Fabrica fabrica1 = new Fabrica();
Fabrica fabrica2 = new Fabrica();
Fabrica fabrica3 = new Fabrica();
fabrica1.setCodigoFabrica(1);
fabrica1.setNomeFabrica("Volkswagen");
fabrica2.setCodigoFabrica(7);
fabrica2.setNomeFabrica("Ford");
fabrica3.setCodigoFabrica(39);
fabrica3.setNomeFabrica("Fiat");
fabricas.add(fabrica1);
fabricas.add(fabrica2);
fabricas.add(fabrica3);
//return fabricas;
}
private void retornarModelos(){
Modelo modelo1 = new Modelo();
Modelo modelo2 = new Modelo();
Modelo modelo3 = new Modelo();
Modelo modelo4 = new Modelo();
Modelo modelo5 = new Modelo();
modelo1.setCodigoModelo(8);
modelo1.setNomeModelo("Fox");
modelo1.setFabrica(fabricas.get(0));
modelo2.setCodigoModelo(1);
modelo2.setNomeModelo("Gol G5");
modelo2.setFabrica(fabricas.get(0));
modelo3.setCodigoModelo(52);
modelo3.setNomeModelo("Uno");
modelo3.setFabrica(fabricas.get(2));
modelo4.setCodigoModelo(2);
modelo4.setNomeModelo("Fusion");
modelo4.setFabrica(fabricas.get(1));
modelo5.setCodigoModelo(14);
modelo5.setNomeModelo("Pálio Weekend");
modelo5.setFabrica(fabricas.get(2));
modelos.add(modelo1);
modelos.add(modelo2);
modelos.add(modelo3);
modelos.add(modelo4);
modelos.add(modelo5);
}
private void carregarFabrica(){
//cbxFabrica.removeAll();
cbxFabrica.addItem("Selecione...");
for(Fabrica fabrica : fabricas)
cbxFabrica.addItem(fabrica.getNomeFabrica());
}
private void carregarModelo(String fabrica){
modelosEncontrados.clear();
for(Modelo modelo : modelos){
if(modelo.getFabrica().getNomeFabrica().equals(fabrica)){
modelosEncontrados.add(modelo);
}
}
popularComboModelo();
}
private void popularComboModelo(){
cbxModelo.removeAllItems();
cbxModelo.addItem("Selecione...");
for(Modelo modelo : modelosEncontrados){
cbxModelo.addItem(modelo.getNomeModelo());
}
}
private void cbxFabricaItemStateChanged(java.awt.event.ItemEvent evento){
carregarModelo(cbxFabrica.getSelectedItem().toString());
}
public static void main(String[] args){
try{
for(UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()){
if("Nimbus".equals(info.getName())){
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}catch(Exception excp){}
ComboEncadeado comboEncadeado = new ComboEncadeado();
comboEncadeado.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
comboEncadeado.setSize(320, 100);
comboEncadeado.setVisible(true);
comboEncadeado.setResizable(false);
comboEncadeado.setLocationRelativeTo(null);
}
private BorderLayout layoutDeBorda;
private JComboBox<String> cbxFabrica;
private JComboBox<String> cbxModelo;
}
4 - Compilo as classes (por meio da classe que tem o método main
):
javac -encoding UTF-8 ComboEncadeado.java
5 - Executo:
java ComboEncadeado
6 - Gero o .jar
:
6.1 Crio o arquivo de classes (.txt
)
6.2 Crio o arquivo de imagens (.txt
) - mas pode chamar direto
6.3 Crio o arquivo do Manifesto - eu tinha dito que tinha que seguir o padrão
Created-By: versão jdk (Oracle Corporation), mas não é bem assim, como pode ser visto abaixo:
6.4 Solicito a geração do aquivo JAR
7 - Resultado
Rodando…
Para maiores informações consulte: JAR File Specification.
Meu arquivo está gerando bug.
Me ajude!
Pelamor de Jesus Cristo!
NÃO ESTOU CONSEGUINDO!
DESISTO!
iatagan.website/exemplo/Window.zip
Iohannes
O programa não executa quando dou dois cliques no programa.
Você poderia modificar meu:
para mim?
Obs: Uso o Ubuntu Linux.
Então, você disse que a versão do seu JDK é 14, mas no site da Oracle, diz que a última versão é a 13. Não posso nada contra isso, ou seja, eu não consigo te ajudar com um JDK que, para a Oracle, não existe.