Não consigo rodar arquivo .jar

Pessoal, eu criei um aplicativo no NetBeans que está funcionando direitinho dentro do NetBeans. Eu terminei o aplicativo e preciso roda-lo fora do NetBeans.
Muito bem…fui no NetBeans, apertei F11 e ele criou o meu arquivo .jar.
Só que quando eu dou dois cliques no arquivo, ele não executa. Já procurei por vários tópicos aqui e não resolvi o meu problema. Vou postar aqui o código do meu aplictativo. Eu tenho dois arquivos… são eles: Main.java e Ctrl_Principal.
Segue o código do Main.java:

package Control;

import javax.swing.UIManager;
public class Main {
    
         public static void main(String args[]) {
            try
            { 
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
            }
            catch (Exception e)
            { 
                  System.err.println("Não foi possivel setar lookandfeel: " + e); 
            }
                Ctrl_Principal roda = new Ctrl_Principal();  
                roda.run();
            }
}

E o Ctrl_Principal.java (em partes):

package Control;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.*;
import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.regex.PatternSyntaxException;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import org.apache.commons.validator.DateValidator;

public class Ctrl_Principal extends javax.swing.JFrame {

    
        private final static String driver = "com.mysql.jdbc.Driver";
	private final static String url = "jdbc:mysql://localhost:3306/sistema";
	
	private final static String username = "root";
	private final static String password = "windows";
	
	private Connection con;
	private Statement sforn, scli, sprod, st_parametros, st_entrada, st_itens_entrada, st_saida, st_itens_saida, st_movimentacao;
	private ResultSet forn, cli, prod, rs_parametros, rs_entrada, rs_itens_entrada, rs_saida, rs_itens_saida, rs_movimentacao;

        
        int registros = 1;
        int procura = 0;
        int procura_cli = 0;
        int procura_prod = 0;
        int itens_entrada = 0;
        int itens_saida = 0;
        int estoque_atual = 0;
        int estoque_final = 0;
        int codigo_produto = 0;
    
        
        public void run()
        {
                Ctrl_Principal barra = new Ctrl_Principal();  
                barra.setVisible(true);
                barra.setExtendedState(Ctrl_Principal.MAXIMIZED_BOTH);
                barra.openDB();
                barra.abre();
                barra.celulas();
                barra.lista_fornecedor();
                barra.lista_produtos();
                barra.mostra();
                barra.lista_clientes();
                barra.mostra_cliente();
                barra.mostra_produto();
                barra.mostra_parametros();
            
        }

Nas Propriedades do projeto dentro do NetBeans eu coloquei o seguinte, conforme eu li em outros tópicos: CLASSE PRINCIPAL: CONTROL.MAIN. (vide figura abaixo)

Coloquei como arquivo que possui o main como classe principal.
Rodei o F11 paa gerar o arquivo .jar, ele gerou certinho, mas quando eu dou dois cliques nele, aparece a mensagem:

e não abre.

Eu vi o arquivo MANIFEST.MF dentro do arquivo .jar e está da seguinte maneira:

Não sei mais o que fazer…Alguém pode me dizer o que está de errado? O que eu tenho que fazer pra rodar esse aplicativo fora do NetBeans?

Valeu!!!


Olá Amiguinho,

você já tentou executar o jar no terminal pra ver qual saída gerada ?
bem, olhando o seu código, eu notei que a sua classe Main está no pacote control, mais no manifest a entrada Main-Class está só declarando Main, enquanto deveria está declarando control.Main.
então troquei a entrada

Main-Class: Main

por

Main-Class: control.Main

Araujo, obrigado pela dica. Eu modifiquei o arquivo Manifest.MF conforme você orientou e parou de dar a mensagem de erro.
POrém agora, ao rodar o aplicativo, ele ameaça que vai abrir, lê algumas coisas no HD mas para por ai. Não abre nada, não dá mensagem nenhuma. Simplesmente não abre.
Tem alguma idéia do que está acontecendo agora?

A propósito…se eu rodo ele em DOS, dando o comando: “java -jar controlado.jar” ele me reotna o seguinte: "EXCEPTION IN THREAD “MAIN” JAVA.LANG.NOCLASSDEFFOUNDERROR: NET/SF/JASPERREPORTS/ENGINE/JREXCEPTION AT CONTROL.MAIN.MAIN(MAIN.JAVA:31)

Se eu dou o comando “javaw -jar controlado.jar”, não acontece nada.

valeu

Cara eu acho que vc não conseguiu empacotar as bibliotecas dos JASPERREPORTS dentro do seu JAR.
Sua aplicação ja faz referencia ao JASPERREPORTS na primeira tela ? Se sim provavelmente é isso.

Pelegrini, o aplicativo faz referencia sim ao JasperReport.
Como eu empacoto as bibliotecas dele no arquivo .jar, visto que foi o Netbeans que criou o arquivo .jar?

Valeu

Geralmente,
quando vc gera um .jar no NetBeans, ele o coloca dentro da pasta dist do seu projeto. As bibliotecas de dependências geralmente vão junto dentro de uma pasta lib. Verifique se os jar’s do JasperReport estão lá.

Essa pasta lib fica dentro do arquivo .jar?
Porque no meu não tem nenhuma pasta junto não.

========================
BUILD OUTPUT DESCRIPTION

When you build an Java application project that has a main class, the IDE
automatically copies all of the JAR
files on the projects classpath to your projects dist/lib folder. The IDE
also adds each of the JAR files to the Class-Path element in the application
JAR files manifest file (MANIFEST.MF).

To run the project from the command line, go to the dist folder and
type the following:

java -jar “TesteDependencia.jar”

To distribute this project, zip up the dist folder (including the lib folder)
and distribute the ZIP file.

Notes:

  • If two JAR files on the project classpath have the same name, only the first
    JAR file is copied to the lib folder.
  • Only JAR files are copied to the lib folder.
    If the classpath contains other types of files or folders, none of the
    classpath elements are copied to the lib folder. In such a case,
    you need to copy the classpath elements to the lib folder manually after the build.
  • If a library on the projects classpath also has a Class-Path element
    specified in the manifest,the content of the Class-Path element has to be on
    the projects runtime path.
  • To set a main class in a standard Java project, right-click the project node
    in the Projects window and choose Properties. Then click Run and enter the
    class name in the Main Class field. Alternatively, you can manually type the
    class name in the manifest Main-Class element.

Só mais uma observação
Estou usando a versão 6 do NetBeans.

Pelegrini, valeu pela dica. Depois de tudo o que você me disse eu observei que dentro da minha pasta dist não tinha nenhuma pasta lib. Eu criei ela manualmente, copiei todos os .jar usados no aplicativo e depois disso rodou o aplicativo.
Agora minha dúvida é: O NetBeans não deveria criar essa pasta pra mim automaticamente? Se sim, eu devo configurar alguma coisa dentro dele para que ele faça isso? Porque o meu não está fazendo.

Valeu

Abraços.

Sim, o NetBeans deveria criar automaticamente essas pastas (pelo menos na versão 6), em meus projetos o NetBeans sempre criou essas pasta “lib” sem mexer em nenhuma configuração.
Faça os testes, crie um projeto simples adicione umas referencias e faça o build para ver se ele gera.

Abraços !!!

Reativando esse tópico por um instante…

No meu caso, fiz tudo isso ai, o programa executa perfeitamente no meu pc a partir desse .jar que foi gerado, juntamente com as bibliotecas das APIs que utilizei. Beleza. No entanto, quando copio a pasta /dist para outro pc e tento executar nesse outro pc, o programa executa sem problemas, porém as funcionalidades das API’s que utilizei no programa não estão disponiveis!

alguem sabe oq acontece?

Talvez possa ser que esse novo computador esteja com a versão do JAVA diferente, talvez desatualizada, da que você usou para programar. Verifique se as versões dos JAVA’s nas duas máquinas são iguais.
Abraços

Não não, a JRE é compatível… andei estudando aqui alguma coisa relacionada ao manifest.mf já até editei ele mas ainda sim não funcionou.

O manifest.mf ta assim:

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

Dai editei e ficou assim, mas não funcionou:

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Class-Path: minhaJarExtra.jar