aplicação roda no eclipse, mas dá erro pelo terminal

Olá amigos do GUJ. Tenho uma aplicação que roda tranquilo no eclipse, mas quando exporto no formato .jar e executo pelo terminal dá uma excessão:

Se alguém puder ajudar, desde já agradeço.

[code]wellington@wellington-pc:~/Área de trabalho$ java -jar contas.jar
0 [AWT-EventQueue-0] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.0.CR2}
21 [AWT-EventQueue-0] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.0.0.CR4}
29 [AWT-EventQueue-0] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
33 [AWT-EventQueue-0] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
Exception in thread “AWT-EventQueue-0” javax.persistence.PersistenceException: Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:382)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at org.wellington.contaspagar.conexao.ConexaoDB.(ConexaoDB.java:12)
at org.wellington.contaspagar.repositorio.ContasPagarRepositorio.(ContasPagarRepositorio.java:23)
at org.wellington.contaspagar.controller.ContasPagarControle.(ContasPagarControle.java:16)
at org.wellington.contaspagar.gui.ContasPagarUI.(ContasPagarUI.java:47)
at org.wellington.contaspagar.gui.ContasPagarUI$10.run(ContasPagarUI.java:351)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1958)
at org.hibernate.ejb.packaging.JarVisitorFactory.getJarURLFromURLEntry(JarVisitorFactory.java:57)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:348)
… 22 more

[/code]

Para rodar a aplicação direto do jar, como você está fazendo?

Assim: java -jar contas.jar

Ele espera algum parâmetro ou a String que deve gerar uma substring está em hardcode no código?
Pois isso

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 indica que ele tenta obter a substring de uma String, mas um dos parâmetros é um indexOf de algo que não está ali.

Quando eu comento a parte onde se conecta ao banco, a janela princinpal abre sem prblemas.

Esse é o código da janela principal:

[code]package org.wellington.contaspagar.gui;

import java.awt.Container;
import java.awt.Dimension;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.List;
import java.util.Locale;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

import org.wellington.contaspagar.controller.ContasPagarControle;
import org.wellington.contaspagar.modelo.Contaspagar;

public class ContasPagarUI extends javax.swing.JFrame{

private static final long serialVersionUID = 1L;

private JMenuBar menubar = new JMenuBar();
private JMenu menuArquivo = new JMenu (“Arquivo”);
private JMenu menuAjuda = new JMenu(“Ajuda”);
private ContasPagarControle cpc = null;
private javax.swing.JButton bTodas;
private javax.swing.JButton bQuitadas;
private javax.swing.JButton bEmAberto;
private javax.swing.JButton bAdicionar;
private javax.swing.JButton bQuitar;
private javax.swing.JButton bExcluir;
private javax.swing.JButton bPorPeriodo;
private javax.swing.JButton bFechar;
private javax.swing.JLabel lMensagem;
private javax.swing.JScrollPane spContas;
private javax.swing.JTable tContas;

public ContasPagarUI(){
initComponents();
this.montaMenu();
this.setSize(800, 410);
this.cpc = new ContasPagarControle();
locateOnScreen();
}

private void montaMenu(){
this.menubar.add(this.menuArquivo);
this.menubar.add(this.menuAjuda);
this.setJMenuBar(this.menubar);
}

@SuppressWarnings(“unchecked”)
private void initComponents(){
tContas = new javax.swing.JTable();
spContas = new javax.swing.JScrollPane(tContas);
bQuitadas = new javax.swing.JButton();
bEmAberto = new javax.swing.JButton();
bPorPeriodo = new javax.swing.JButton();
bTodas = new javax.swing.JButton();
lMensagem = new javax.swing.JLabel();
bAdicionar = new javax.swing.JButton();
bQuitar = new javax.swing.JButton();
bExcluir = new javax.swing.JButton();
bFechar = new javax.swing.JButton();
this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.setTitle(“Controle de Contas a Pagar”);
this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
bQuitadas.setText(“Quitadas”);
bEmAberto.setText(“Em Aberto”);
bPorPeriodo.setText(“Por Periodo”);
bTodas.setText(“Todas”);
bAdicionar.setText(“Adicionar”);
bQuitar.setText(“Quitar”);
bExcluir.setText(“Excluir”);
bFechar.setText(“Fechar”);
lMensagem.setFont(new java.awt.Font(“Arial”, 0, 18));
lMensagem.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
spContas.setBounds(5, 50, 630, 300);
tContas.setBounds(5, 50, 630, 300);
bTodas.setBounds(650, 80, 120, 25);
bQuitadas.setBounds(650, 110, 120, 25);
bEmAberto.setBounds(650, 140, 120, 25);
bPorPeriodo.setBounds(650, 170, 120, 25);
bAdicionar.setBounds(650, 200, 120, 25);
bQuitar.setBounds(650, 230, 120, 25);
bExcluir.setBounds(650, 260, 120, 25);
bFechar.setBounds(650, 290, 120, 25);
lMensagem.setBounds(5, 10, 630, 25);

   Container cp = getContentPane();
   cp.setLayout(null);
   cp.add(spContas);
   cp.add(tContas);
   cp.add(bTodas);
   cp.add(bQuitadas);
   cp.add(bEmAberto);
   cp.add(bPorPeriodo);
   cp.add(bAdicionar);
   cp.add(bQuitar);
   cp.add(bExcluir);
   cp.add(bFechar);
   cp.add(lMensagem);
   
   tContas.setModel(new javax.swing.table.DefaultTableModel(
      new Object[][] {}, new String[] {"Código", "Descrição", "Cedente",
         "Vencimento", "Valor", "Data Pag.", "Valor Pago" }){
       
            private static final long serialVersionUID = 1L;
        @SuppressWarnings("rawtypes")
        Class[] types = new Class[]{
             java.lang.String.class, java.lang.String.class,
             java.lang.String.class, java.lang.String.class,
             java.lang.String.class, java.lang.String.class,
             java.lang.String.class};
             boolean[] canEdit = new boolean[]{
                false, false, false, false, false, false, false};
          @SuppressWarnings("rawtypes")
        public Class getColumnClass(int columnIndex){
             return types[columnIndex];
          }
       public boolean isCellEditable(int rowIndex, int columnIndex){
          return canEdit[columnIndex];
       }
  });
  spContas.setViewportView(tContas);
  bQuitadas.addActionListener(new java.awt.event.ActionListener(){
     public void actionPerformed(java.awt.event.ActionEvent evt){
        bQuitadasActionPerformed(evt);
     }
  });
  bEmAberto.addActionListener(new java.awt.event.ActionListener(){
     public void actionPerformed(java.awt.event.ActionEvent evt){
        bEmAbertoActionPerformed(evt);
     }
  });
  bPorPeriodo.addActionListener(new java.awt.event.ActionListener(){
     public void actionPerformed(java.awt.event.ActionEvent evt){
        bPorPeriodoActionPerformed(evt);
     }
  });
  bTodas.addActionListener(new java.awt.event.ActionListener(){
     public void actionPerformed(java.awt.event.ActionEvent evt){
        bTodasActionPerformed(evt);
     }
  });
  bAdicionar.addActionListener(new java.awt.event.ActionListener(){
     public void actionPerformed(java.awt.event.ActionEvent evt){
        bAdicionarActionPerformed(evt);
     }
   });
   bQuitar.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent evt){
         bQuitarActionPerformed(evt);
      }
   });
   bExcluir.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent evt){
         bExcluirActionPerformed(evt);
      }
   });
   bFechar.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent evt){
         bFecharActionPerformed(evt);
      }
   });
   this.pack();

}

private void bTodasActionPerformed(java.awt.event.ActionEvent evt){
lMensagem.setText(“Exibindo contas Quitadas e Em Aberto”);

  List<Contaspagar> contasPagarList = cpc.listarContas();
  preencheJTable(contasPagarList);    

}

private void bQuitadasActionPerformed(java.awt.event.ActionEvent evt){
lMensagem.setText(“Exibindo contas Quitadas”);

  List<Contaspagar> contasPagarList = cpc.listarContasQuitadas();          
  preencheJTable(contasPagarList);

}

private void bEmAbertoActionPerformed(java.awt.event.ActionEvent evt) {
lMensagem.setText(“Exibindo Contas em Aberto”);

  List<Contaspagar> contasPagarList = cpc.lstarContasEmAberto();
  preencheJTable(contasPagarList);

}

private void bPorPeriodoActionPerformed(java.awt.event.ActionEvent evt){
try{
PeriodoUI periodoUI = new PeriodoUI();
if((periodoUI.getDataInicial() != null)
&& (periodoUI.getDataFinal() != null)){
lMensagem.setText("Exibindo contas com vencimento entre “
+periodoUI.getDataInicial() + " e”
+periodoUI.getDataFinal());

           List<Contaspagar> contasPagarList =
                   cpc.listarContasPorPeriodo(periodoUI.getDataInicial(),
                           periodoUI.getDataFinal());
           preencheJTable(contasPagarList);
                   
       }
   }catch (Exception ex) {
      System.out.println(ex);
   }

}
private void bAdicionarActionPerformed(java.awt.event.ActionEvent evt){

   try{
       AdicionarContaPagarUI adicionarContaPagarUI =
               new AdicionarContaPagarUI();
       if((adicionarContaPagarUI.getDescricao() != null)
               && (adicionarContaPagarUI.getCedente() != null)
               && (adicionarContaPagarUI.getDvencimento() != null)
               && (adicionarContaPagarUI.getValor() != null)){
          
           
           
           cpc.adicionar(adicionarContaPagarUI.getDescricao(),
                   adicionarContaPagarUI.getCedente(),
                   adicionarContaPagarUI.getDvencimento(),
                   adicionarContaPagarUI.getValor());
           
           bEmAberto.doClick();
       }
       
   }catch (Exception ex) {
      System.out.println(ex);
   }

}

private void bExcluirActionPerformed(java.awt.event.ActionEvent evt){
try{
int retorno =
JOptionPane.showOptionDialog(null, “Deseja excluir a conta selecionada”
+"(" +tContas.getValueAt(tContas.getSelectedRow(), 1)
+")?", “Controle de ontas a Pagar”, JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
if(retorno == 0){

            cpc.excluirConta((Long)
                    tContas.getValueAt(tContas.getSelectedRow(), 0));
            
            bTodas.doClick();
        }
    }catch (Exception ex) {
        System.out.println(ex);
}

}

private void bQuitarActionPerformed(java.awt.event.ActionEvent evt){

    try{
        if(tContas.getValueAt(tContas.getSelectedRow(), 5) == null){
            QuitarContaPagarUI quitarContaPagarUI = new QuitarContaPagarUI(
                tContas.getValueAt(tContas.getSelectedRow(), 0).toString(),
                tContas.getValueAt(tContas.getSelectedRow(), 1).toString(),
                tContas.getValueAt(tContas.getSelectedRow(), 2).toString(),
                tContas.getValueAt(tContas.getSelectedRow(), 3).toString(),
                tContas.getValueAt(tContas.getSelectedRow(), 4).toString());
           
            if((quitarContaPagarUI.getDpagamento() != null)
             && (quitarContaPagarUI.getValorpagto() != null)){
                
                cpc.atualizarConta(quitarContaPagarUI.getCodigo(),
                quitarContaPagarUI.getDescricao(),
                quitarContaPagarUI.getCedente(),
                quitarContaPagarUI.getDvencimento(),
                quitarContaPagarUI.getValor(),
               
                quitarContaPagarUI.getDpagamento(),
                quitarContaPagarUI.getValorpagto());
                
            
           
               bQuitadas.doClick();
               
            }
            
        }else{
            JOptionPane.showMessageDialog(null,
                    "A conta selecionada já foi quitada.");
        }
    
    
    }catch (Exception ex) {
      System.out.println(ex);
    }

}

private void bFecharActionPerformed(java.awt.event.ActionEvent evt){
System.exit(0);
}

private void preencheJTable(List listaDeContasPagar){
DecimalFormat df = new DecimalFormat("##0.00",
new DecimalFormatSymbols(Locale.US));
DefaultTableModel tm = (DefaultTableModel) tContas.getModel();

   for(int i = (tm.getRowCount() - 1); i >= 0; --i ){
       tm.removeRow(i);
   }
   
   for(int i = 0; i < listaDeContasPagar.size(); i++){
       if(listaDeContasPagar.get(i).getDpagamento() != null){
          tm.addRow(new Object[] {listaDeContasPagar.get(i).getCodigo(),
                        listaDeContasPagar.get(i).getDescricao(),
                        listaDeContasPagar.get(i).getCedente(),
            DateFormat.getDateInstance().format(listaDeContasPagar.get(i)
                        .getDvencimento().getTime()),
                        df.format(listaDeContasPagar.get(i).getValor()),
                        DateFormat.getDateInstance().format(listaDeContasPagar.get(i)
                        .getDpagamento().getTime()),
                        df.format(listaDeContasPagar.get(i).getValorpagto())});
           
                }else{
                      tm.addRow(new Object[] {listaDeContasPagar.get(i).getCodigo(),
          listaDeContasPagar.get(i).getDescricao(),
          listaDeContasPagar.get(i).getCedente(),
          DateFormat.getDateInstance().format(listaDeContasPagar.get(i)
          .getDvencimento().getTime()),
          df.format(listaDeContasPagar.get(i).getValor()) });
        }

       }

}

private void locateOnScreen(){
final Dimension paneSize = this.getSize();
final Dimension screenSize = this.getToolkit().getScreenSize();
this.setLocation((screenSize.width - paneSize.width) / 2,
(screenSize.height - paneSize.height) / 2);
}

public static void main(String args[]){
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ContasPagarUI().setVisible(true);

    }
});

}
} [/code]

Classe controle

[code]package org.wellington.contaspagar.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.wellington.contaspagar.modelo.Contaspagar;
import org.wellington.contaspagar.repositorio.ContasPagarRepositorio;

public class ContasPagarControle {

private ContasPagarRepositorio contasPagarRepositorio = null;
        
public ContasPagarControle(){
    this.contasPagarRepositorio =
            new ContasPagarRepositorio();
}

public void adicionar(String descricao, String cedente,
        String dataVencimento, double valor){
    
    Contaspagar contaspagar  = new Contaspagar();
         
    contaspagar.setDescricao(descricao);
    contaspagar.setCedente(cedente);
    contaspagar.setValor(valor);
    
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date dVenc;
        dVenc = sdf.parse(dataVencimento);
        contaspagar.setDvencimento(dVenc);
    } catch (ParseException e) {    
        e.printStackTrace();
    }
    contasPagarRepositorio.adicionarConta(contaspagar);
}

public void excluirConta(Long codigo){
    contasPagarRepositorio.excluir(codigo);
}

public List<Contaspagar> lstarContasEmAberto(){
    return contasPagarRepositorio.getContasEmAberto();
}

public List<Contaspagar> listarContasQuitadas(){
    return contasPagarRepositorio.listarContasPagarQuitadas();
}

public List<Contaspagar> listarContasPorPeriodo(String dvencimento1,
        String dvencimento2){
    
    try{
        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");
        Date dVenc1 = sdf.parse(dvencimento1);
        Date dVenc2 = sdf.parse(dvencimento2);
        
        return contasPagarRepositorio.listarContasPagarPorPeriodo(dVenc1, dVenc2);
        
    }catch(Exception ex){
        System.out.println(ex);
    }
    return null;
    
}

public void atualizarConta(Long codigo, String descricao, String cedente,
        String dvencimento, double valor, String dpagamento, double valorpagto){
    try{
       
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            Date dVenc = sdf.parse(dvencimento);
            Date dPagto = sdf.parse(dpagamento);
            
            Contaspagar contaspagar = new Contaspagar();
            contaspagar.setCodigo(codigo);
            contaspagar.setDescricao(descricao);
            contaspagar.setCedente(cedente);
            contaspagar.setDvencimento(dVenc);
            contaspagar.setValor(valor);
            contaspagar.setDpagamento(dPagto);
            contaspagar.setValorpagto(valorpagto);
        
            contasPagarRepositorio.atualizar(contaspagar);
           
    }catch (Exception ex) {
      System.out.println(ex);
    }
            
}

public List<Contaspagar> listarContas(){
    return contasPagarRepositorio.listarContasPagar();
}

}
[/code]

classe repositorio referente as operações no banco

[code]package org.wellington.contaspagar.repositorio;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TemporalType;

import org.wellington.contaspagar.conexao.ConexaoDB;
import org.wellington.contaspagar.modelo.Contaspagar;

public class ContasPagarRepositorio {

EntityManagerFactory factory;        
EntityManager em;

public ContasPagarRepositorio(){
    this.factory = new ConexaoDB().getFactory();
    this.em = factory.createEntityManager();
}


public void adicionarConta(Contaspagar contaspagar){
    em.getTransaction().begin();
    em.persist(contaspagar);
    em.getTransaction().commit();
}

public void excluir(Long codigo){
    Contaspagar contaspagar = em.find(Contaspagar.class, codigo);
    em.getTransaction().begin();
    em.remove(contaspagar);
    em.getTransaction().commit();    
}

@SuppressWarnings("unchecked")
public List<Contaspagar> getContasEmAberto(){
    return em.createNamedQuery("Contaspagar.findEmAberto").getResultList();
}

@SuppressWarnings("unchecked")
public List<Contaspagar> listarContasPagarQuitadas(){
    return em.createNamedQuery("Contaspagar.findQuitadas").getResultList();
}

@SuppressWarnings("unchecked")
public List<Contaspagar> listarContasPagar(){
    return em.createNamedQuery("Contaspagar.findAll").getResultList();
}

@SuppressWarnings("unchecked")
public List<Contaspagar> listarContasPagarPorPeriodo(
        Date dVenc1, Date dVenc2){
    
    try{
        javax.persistence.Query consulta =
                em.createNamedQuery("Contaspagar.findByPeriodo");
        consulta.setParameter("dvencimento1", dVenc1, TemporalType.DATE);
        consulta.setParameter("dvencimento2", dVenc2, TemporalType.DATE);
        
        return consulta.getResultList();   
    }catch(Exception ex){
        System.out.println(ex);
    }
    return null;      
}

public void atualizar(Contaspagar contaspagar){
        em.getTransaction().begin();
        em.merge(contaspagar);
        em.getTransaction().commit();

}
}
[/code]

Classe de conexão com o banco

[code]package org.wellington.contaspagar.conexao;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class ConexaoDB {

private static ConexaoDB instancia = null;
private static EntityManagerFactory factory;

public ConexaoDB(){
    factory = Persistence.createEntityManagerFactory("BANCO_DE_CONTAS");
}

public static ConexaoDB getInstancia(){
    if(instancia == null){
        instancia = new ConexaoDB();
    }
    return instancia;
}

public EntityManagerFactory getFactory(){
    return factory;
}

}
[/code]

Alguém teria ideia de como resolver? Não precisa dizer como se faz. Me dando um “norte” (tal como estudar um assunto em expecífico, etc) já seria de grande ajuda, pois já tentei, tentei e não consigo resolver, visto que sei pouco de java. Obrigado.