Criei um arquivo JAR no netbeans mas ele não abre de jeito nenhum li vários tópicos aqui e em outros foruns mas não consegui resolver, quando eu executo o JAR, o banco de dados é criado, as tabelas são criadas, os dados são inseridos mas a aplicação não abre, já reinstalei o JDK, já verifiquei o arquivo MANINFEST, já formatei o computador e reinstalei tudo de novo, mas não abre e não dá nenhuma mensagem, só funciona dentro de netbens, quando executo pelo prompt da a mensagem que a conexão foi bem sucedida e não acontece mais nada. preciso muito resolver esse problema pois tenho de instalar esse sistema em uma imobiliária e já estou bem atrasado. Por favor me ajudem, estou desempregado e não posso perder essa oportunidade
Olá vamos lá.
Você definiu sua classe principal ?
Supondo que o nome do seu projeto fosse projeto01.
Tente executar usando o terminal ou crie um bat chamando o arquivo .jar segue o comando
java -jar projeto01.jar
Posta a classe main.
já fiz tudo isso, e nada deu certo, peguei um JAR antigo de outro sistema que eu tinha feito algum tempo em outra versão do netbeans com outra versão do java e ele funciona perfeitamente, porém esse arquivo JAR da imobiliária não abre de jeito nenhum só no netbeans
Boa noite, darlan, segue abaixo a classe main:
package br.com.informatica.dal;
import br.com.informatica.fabrica.CriarTabelas;
import br.com.informatica.telas.TelaLogin;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
/**
*
* @author edilson
*/
public class Conexao {
int cont =0;
public static void main(String[] args) {
gravarArquivoConfiguracao();
leArquivoConfiguracao();
}
public Conexao(){
if (cont == 0) {
TelaLogin login = new TelaLogin();
if (conector != null) {
login.lblStatus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/jsinformatica/telas/dbconnect.png")));
} else {
login.lblStatus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/jsinformatica/telas/dberror.png")));
}
}
}
static String host, porta, user, senha;
static private String driver = "com.mysql.jdbc.Driver";
static public Connection conector;
// private boolean verificacao = false;
// static boolean leitura = false;
static public void gravarArquivoConfiguracao(){
File conector = new File("c:/windows/SABD/conector.ini");
List<String>dados = new ArrayList<>();
FileWriter escreveDados;
dados.add("localhost");
dados.add("3306");
dados.add("root");
dados.add("admin123");
if (!conector.exists()) {
try {
conector.createNewFile();
escreveDados = new FileWriter(conector);
for (String dado: dados)
escreveDados.write(dado + "\n");
escreveDados.flush();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
}
static public void leArquivoConfiguracao() {
try {
String linha;
String ArquivoConfiguracao = "C:/windows/SABD/conector.ini";
int cont = 0;
//cria o arquivo conexao.ini no caminiho apontado pela variavel (ArquivoConfiguracao)
File arq = new File(ArquivoConfiguracao);
// se o arquivo exite é porque o arquivo foi criado no cominho determindo
if (arq.exists()) {
// se o arquivo exite ele será lido e guardado na variavel (reader)
FileReader reader = new FileReader(ArquivoConfiguracao);
//agora ele sera colocado em uma variavel do tip buffer
BufferedReader leitor = new BufferedReader(reader);
while (true) {
// o metodo readLine(), busca sempre a proxima linha
linha = leitor.readLine();
if (cont == 0) {
host = (linha);
}
if (cont == 1) {
porta = (linha);
}
if (cont == 2) {
user = (linha);
}
if (cont >= 3) {
senha = (linha);
break;
}
System.out.println(linha + "\n");
cont++;
}
conexaoServidor(host, porta, user, senha);
} else {
JOptionPane.showMessageDialog(null, "Arquivos de configuraçao nao encontrado", "Atencao", 0);
}
//essa linha é apenas para mostrar ao programador os dados de conexao, o usuario não vê essa saida
System.out.println("Dados: " + host + " " + porta + " " + user + " " + senha + " ");
} catch (Exception erro) {
JOptionPane.showMessageDialog(null, erro);
}
}
static protected boolean conexaoServidor(String Servidor, String Porta, String usuario, String Senha) {
boolean conectar = false;
String SERVIDOR = Servidor;
String PORTA_CONEXAO = Porta;
String USUARIO = usuario;
String SENHA = Senha;
// compara as variaveis acima com as variaveis que estão dentro do mysql descrito no caminho abaixo
try {
Class.forName(driver);
conector = DriverManager.getConnection("jdbc:mysql://" + SERVIDOR + ":" + PORTA_CONEXAO + "",
USUARIO, SENHA);
conectar = true;
} catch (ClassNotFoundException Fonte) {
JOptionPane.showMessageDialog(null, "Driver nao localizado");
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
if (conectar) {
System.out.println("conexao bem sucedida");
CriarTabelas criarTabelas = new CriarTabelas();
criarTabelas.criarBanco();
// conectarDataBase();
} else {
System.out.println("conexao MAL suceddida");
JOptionPane.showMessageDialog(null, "Não Houve Conexao com o Banco", "Erro", 0);
JOptionPane.showMessageDialog(null, "1-Verifique usuario e senha, \n2-Verifique se o Servidor Mysql está ligado \n3-Verifique a Conexao de rede", "Mensagem", 1);
new TelaLogin().setVisible(true);
}
return conectar;
}
static public void fechaConexao() {
try {
conector.close();
} catch (SQLException fech) {
JOptionPane.showMessageDialog(null, "Erro ao fechar conexao com o banco de dados" + fech);
}
}
}
agora eu abri o projeto em uma versão mais antiga do netbeans e construi o JAR, então quando eu tento abrir o JAR, está sendo lançado uma exceção:
,
porem essa exceção só é lançada quando eu executo o JAR, quando eu carrego o projeto no netbeans funciona beleza, vou instalar uma versão mais antiga do JDK também se der certo eu posto aqui, antes quando eu construía o JAR no netbeans 10.0 ele não dava nenhuma mensagem, simplesmente não abria.
Troca o JOptionPane por ex.printStackTrace();
troquei o JOptionPane pelo ex.printStackTrace(), agora voltou ao que era antes, não dá nenhuma mensagem de erro mas não abre
Essa mensagem é apresentada aqui.
O que ocorre é que, por alguma razão, você tem uma chamada a algo de um objeto nulo.
Seria interessante apresentar o log do erro, antes de exibir o popup (ou depois), printa o stacktrace da exceção
erro.printStackTrace();
Sim, e complementando o que o darlan disse, abre o seu arquivo pelo cmd.
digita:
java -jar seuArquivo.jar
Lá vc vai ver o erro apresentado.
Talvez não, pois ele mascarou o erro, colocando no catch apenas a apresentação do popup.
oxi darlan, mas vc falou pra ele alterar kkkkkkk, então foi mais complemento da sua resposta mesmo.
Passo 1 - Seguir os passos do darlan
Passo 2 - Segue os meus passos
Criei um novo projeto, e fui clonando as classes do projeto que está com problema uma a uma, executando e criando o JAR, na medida que ia criando o JAR eu ia testando, assim que eu criei a classe que possui o método que acessa o banco, o JAR não abriu mais, ou seja, o problema está na classe que acessa os banco. Outra coisa, assim que executo o programa no netbeans aparece esse alerta na janela de saída: “ Tue Sep 24 10:50:30 BRT 2019 WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.”, veja o alerta abaixo:
acho que não é esse o problema, pois trata-se apenas de um alerta, tirando esse alerta, o programa não lança nenhuma exceção
consegui! Executei o JAR pelo prompt, e dessa vez ele deu algumas linhas de erro, não sei porque antes ele não dava nenhuma mensagem, veja abaixo:
Infelizmente vejo que esse é um erro de programação muito comum: O pessoal fica usando o getResource pra carregar arquivos e/ou imagens.
O getResource só encontra recursos no sistema de arquivos, não dentro do JAR.
Se você vai carregar recursos que estão dentro do JAR, tem que usar o getResourceAsStream, passando o caminho relativo ao classpath da aplicação, começando com /.
Da série de informações que valeriam a pena ter um post fixo:


