Erro de conexao com banco ao abrir programa via executavel

Galera, estou com o seguinte erro. Gerei um executavel do meu programa e ao abrir via esse executavel me sai o seguinte erro: “No suitable driver found for” minha conexao.

Vi bastante coisa no Google, a maioria gringas, mas as respostas foram bastante confusas pra mim. O mais estranho pra mim é que, se eu abro o executavel estando dentro da pasta “dist”, o programa roda normal. Mas se eu jogo o executavel pra outro lugar (área de trabalho, por ex), aí me dá o erro.

Bom, minha classe de conexao está assim:

public class ConexaoBanco {

public Statement stm;
public ResultSet rs;

private String driver = "org.postgresql.Driver";
private String caminho = "jdbc:postgresql://localhost:5432/sistemaArenas";  
private String usuario = "postgres"; 
private String senha = "123"
    
public Connection con;

public void conectar() {
    try {
        System.setProperty("jdbc.Drivers", driver);
        con = DriverManager.getConnection(caminho, usuario, senha);
       
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Falha na conexao! \n " +ex.getMessage());
    }

Estou usando NetBeans e o banco é PostgreSQL.

Esse erro, em geral, está associado a um path que não coincide com o esperado. Isso pode ocorrer por N razões, as principais são erro na escrita do path (que você chamou de caminho) ou incompatibilidade de versões.

O que me chamou a atenção e não entendi foi esta linha:

Por que?

Esta variável é desnecessária.

Esta instrução é desnecessária.

No seu projeto:

  • vá em bibliotecas;
  • click com o botão auxiliar;
  • escolha a opção adicionar biblioteca; e
  • escolha a opção Driver JDBC do PostgreSQL.

Pra mim isso é claramente um problema de classpath. Na hora de gerar o jar é preciso informar à aplicação onde achar as bibliotecas que você está usando. Executando pela pasta dist funciona pois por padrão a pasta onde o jar executa faz parte do classpath, mas se você pretende distribuir a aplicação, vai ter que dar uma estudada em como ajustar isso direito. Ou usar alguma ferramenta que coloque todas as libs dentro do jar, se não me engano o eclipse tem uma ferramenta que faz isso.