Erro chato

9 respostas
H

Pessoal, fiz alguns formulários e nunca tive um problema tão chato como esse…
toda hora que vou testar aparece essa mensagem:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

eu não sei onde realmente está o erro… a mensagem de erro completa segue aqui:

aí vai o código…
Agradeço desde já a quem puder me ajudar!! muito obrigado a todos!!
Horácio

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Vendedores.java
 *
 * Created on 21/02/2011, 22:55:37
 */

package Formularios;

import Formularios.Utils.Conexao;
import java.sql.SQLException;
import javax.swing.JOptionPane;

 

     
/**
 *
 * @author Administrador
 */
public class Vendedores extends javax.swing.JFrame {


    Conexao conectaVendedores;


    /** Creates new form Vendedores */
    public Vendedores() {
        initComponents();
          conectaVendedores= new Conexao();
          conectaVendedores.conecta();

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jTexttelefone = new javax.swing.JTextField();
        jTextEmail = new javax.swing.JTextField();
        jTextNome = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));

        jTexttelefone.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTexttelefoneActionPerformed(evt);
            }
        });

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jTextNome, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jTextEmail, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jTexttelefone, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jButton1))
                .addContainerGap(280, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTexttelefone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap(183, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    private void jTexttelefoneActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

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


             try
        {
        String sqlinsert="insert into vendedores(nome, telefone,email ) values('"+jTextNome.getText()+"' , "
                + "'"+jTexttelefone.getText()+"' ,'"+jTextEmail.getText()+"')";
           conectaVendedores.statement.execute(sqlinsert);
           

        }

      catch(SQLException erro)
      {
    JOptionPane.showMessageDialog(null, erro.getMessage());
      }




        // TODO add your handling code here:
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Vendedores().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    public javax.swing.JTextField jTextEmail;
    public javax.swing.JTextField jTextNome;
    public javax.swing.JTextField jTexttelefone;
    // End of variables declaration

}

9 Respostas

ViniGodoy

O erro diz que existe um objeto nulo, na linha 124, dentro do método jButton1ActionPerformed e você está tentando usar um método dele.
É um erro bastante específico e extremamente fácil de identificar. Simplesmente use o depurador e veja que objeto nulo é esse.

H

eu usei o depurado e ele me retornou o seguinte:
“não há variáveis a serem exibidas porque não há thread atual”
o que isso significa?
ainda to perdido aqui :frowning:

ViniGodoy

Você colocou um breakpoint na linha, rodou seu programa e fez a aplicação parar lá?

H

breakpoint?
como assim??

malokas

Da uma olhada nisso aqui. Pra vc ter uma ideia de como usar o debug.
[youtube]


[/youtube]

http://www.vogella.de/articles/EclipseDebugging/article.html

H

valeu, estou carregando o video…
bom, seguinte…
eu vi que no codigo

try
  {
  String sql ="insert into vendedores(nome, telefone)values('1','2')";
conectabanco.statement.executeUpdate(sql);
 // JOptionPane.showMessageDialog(null, "deu certo");
System.out.println("certo");
  }
    catch(SQLException erro){
   // JOptionPane.showMessageDialog(null, erro.getMessage());
        System.out.println("erro");
    }

na linha :

conectabanco.statement.executeUpdate(sql);

ele diz que tem que “atribuir o valor de retorno a variável”
só que o sql tá completo , então, qual seria o valor dessa variável ???

RESOLVIDO PESSOAL!!!
o erro acabou quando lancei uma executesql no começo da página, logo após a conexao acontecer…

conecta.executeSQL("select * from vendedores limit 1");

Pessoal, apesar de ter resolvido, ainda não antendo o que a chamada desse método tinha a ver com o resto…
Alguénm pode por favor, me explicar?? estou mais conso que antes!!!
Mas obrigado todos pela atenção!!!
Horácio

ViniGodoy

Horacio.

[size=24][color=red]Não programe por tentativa e erro.[/color][/size]

O problema não está resolvido até você entender completamente:

a) Por que ele ocorreu;

b) Por que a correção aplicada funcionou;

c) Quais as consequências de corrigir da forma que você corrigiu.

Programar por tentativa e erro é um dos grandes males da informática. É o que faz de uma pessoa um mal profissional. Gera bugs.

Se você ainda não entendeu a solução, o problema não está resolvido.

Além disso, aprenda a usar o depurador e tente entender as mensagens de erro. O depurador uma ferramenta básica, essencial para qualquer programador. É tão importante saber usa-lo como conhecer uma linguagem, ou saber fazer bons algorítmos.

O primeiro erro que você teve era claro. Você estava tentando usar uma variável que não tinha sido inicializada. Pode ser a conectabanco ou o statement. O problema não tinha nada a ver com o SQL.

Provavelmente sua “correção” ainda manteve o bug na conectabanco. Talvez esse trecho de código irá funcionar, mas não significa que a correção valerá para todo sistema. Por isso é tão perigoso programar por tentativa e erro. Sem entender as consequencias do que você faz, você pode corrigir em um lugar e inserir um erro pior em outro.

kiq095

tente tirar o conectando da frente do statement…!!!

statement.executeUpdate(sql);… acho q seja isso …!

e outra coisa quando aparese esse erro de null e porq vc fexou a conexao e depois chamou o metodo … ou esta passando um valor q nao e compativel com o banco de dados … tipo pasando um int para uma string ou no campo do banco cabe 3 digitos e vc esta passando 6 coisas assim …!!!

da uma olhadinha ai .!!

H

galera, ainda estou aprendendo isso! rsrrs
mas concordo com o lance do debug, ainda tem muita coisa para aprender mesmo!! isso eu reconheço de verdedade…
bom pensando direito no que aconteceu, pelo que eu entendi, ele chamou o metodo " conecta.executeSQL(); "
aí, sim, ele conseguiu realizar o processo corretamente…
o unico problema aqui é que não consigo fazer ele rodar como os demais metodos…
por exemplo

metodo conecta ->conecta.conecta();

metodo execute… -> conecta.executeSQL(“select * from produtos limit 1”);(assim vai)
metodo execute… -> conecta.executeSQL( );(assim não vai)

na verdade, faltava chamar esse metodo…
quando chamei ele, aí, a aplicação rodou normalmente…
segundo o erro e se entendi tudo corretamente, era esse o objeto que faltava na história…
bom, aguardo mais comentários!!!
mais uma vez, muito obrigado pela ajuda…
Horácio

Criado 22 de fevereiro de 2011
Ultima resposta 23 de fev. de 2011
Respostas 9
Participantes 4