Erro ao criar um jar

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

Não entendi…

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)

image

6.2 Crio o arquivo de imagens (.txt) - mas pode chamar direto

image

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:

image

6.4 Solicito a geração do aquivo JAR

image

7 - Resultado

image

Rodando…

image

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:

  • manifest.txt

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.