Erro em containers da tabela do banco de dados

Não sei bem se o erro é gráfico ou se foi porque eu adicionei um getText() no field no query para capturar os dados digitados.

vejam as excessões:

java.lang.NullPointerException at java.awt.Container.addImpl(Container.java:1031) at java.awt.Container.add(Container.java:903) at consulta.ptela1(consulta.java:123) at consulta.<init>(consulta.java:81) at consulta.main(consulta.java:69)

Agora o código:

[code] public class consulta extends JFrame {

  private Font f = new Font("Arial", Font.PLAIN, 11);
  private Connection con, con2;   
  private JTable tabela, tabela2; 
  private JScrollPane scroller, scroller2;
  private JTabbedPane abas;
  private JPanel p1, p2;  
  
  JLabel labCons1;
     JTextField fieldCons1;
     JButton botOK1;
     
  JLabel labCons2;
     JTextField fieldCons2;
     JButton botOK2;
  
 public static void main(String[] args) {
     try { 
  //UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel");
     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (UnsupportedLookAndFeelException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
    
    
       consulta telaConsulta = new consulta();
                telaConsulta.setVisible(true);
            }
            
     
 public consulta() {
     super("Acompanhamento do gado");
     setSize(750, 400);
     setVisible(true);
     
     abas = new JTabbedPane();
     abas.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     abas.addTab("Visualizar dados", null, ptela1(), "Lista de gado cadastrado");
   //  abas.addTab("Vacinas", null, ptela2(), "Lista de vacinas");

     this.add(abas);
     
    }
     
 private JComponent ptela1() {
   p1 = new JPanel(new BorderLayout());
   
   JPanel p1Consulta = new JPanel(new FlowLayout());
      labCons1 = new JLabel("Pesquisar por código");
      fieldCons1 = new JTextField(15);
      botOK1 = new JButton("OK");
      botOK1.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              buscaTabela();
            }
        });
        
     p1Consulta.add(labCons1);
     p1Consulta.add(fieldCons1);
     p1Consulta.add(botOK1);
     
   
   JPanel pBotoes = new JPanel(new BorderLayout());
   
   JPanel b2Bot = new JPanel(new BorderLayout());
   JButton botSalvar = new JButton("Salvar");
   JButton botImprimir = new JButton("Imprimir");
   b2Bot.add(botSalvar, BorderLayout.CENTER);
   b2Bot.add(botImprimir, BorderLayout.EAST);
   
   JPanel botAtual = new JPanel(new BorderLayout());
   JButton botAtualizar = new JButton("Atualizar");
   botAtual.add(botAtualizar, BorderLayout.WEST);
   
   pBotoes.add(b2Bot, BorderLayout.EAST);
   pBotoes.add(botAtual, BorderLayout.WEST);


  p1.add(p1Consulta, BorderLayout.NORTH);
  p1.add(scroller, BorderLayout.CENTER);
  p1.add(pBotoes, BorderLayout.SOUTH); 
     
    // buscaTabela();   // chamada do método "buscaTabela()" 
     
     return p1;
  }   

private void buscaTabela() {
// inicialização de conexão ao banco ****
String url = “jdbc:mysql://localhost/gado”;
String usuario = “root”;
String senha = “2017”;
try {
Class.forName(“com.mysql.jdbc.Driver”);
con = DriverManager.getConnection(url, usuario, senha);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Conexão não estabelecida!\n” + e,
“Erro”, JOptionPane.ERROR_MESSAGE);
}

 Statement st;   
 ResultSet rs;   
 try {   
   Vector cabecalho = new Vector();
   Vector linhas = new Vector();
    st = con.createStatement();   

// Selecionando vacinas ****
String tableName = “tabela1”;
rs = st .executeQuery("select codGado, nomeGado, idadeGado, datInsemin, "+
"datParto, datSecagem, sexoCria, datVacina FROM " + tableName+ “WHERE codGado = '” + fieldCons1.getText() + “’;”); // foi o que eu adicionei por último, antes de apontar excessões

        rs.next();  
        
        ResultSetMetaData rsmd = rs.getMetaData();
        
        for (int i = 1; i <= rsmd.getColumnCount(); ++i)   
           cabecalho.addElement(rsmd.getColumnName(i)); 
           
        do {   
           linhas.addElement(proximaLinha(rs, rsmd)); 
        } while (rs.next());  
        
        tabela = new JTable(linhas, cabecalho);
        
        tabela.setFont( f );
        
        scroller = new JScrollPane(tabela);  /*não tem como eu adicionar o scroller

a partir daqui, por isso que adicionei no JComponent ptela1 */

        validate();   
        st.close(); 
        
     } catch (SQLException sqlex) {
         
         JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
         "Erro", JOptionPane.ERROR_MESSAGE);
         
     }   
     
  }   

      
  private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd) {   
      
     Vector LinhaAtual = new Vector(); 
     
     try {   

              LinhaAtual.addElement(rs.getInt("codGado")); 

              LinhaAtual.addElement(rs.getString("nomeGado"));

              LinhaAtual.addElement(rs.getInt("idadeGado"));  

              LinhaAtual.addElement(rs.getString("datInsemin"));   

              LinhaAtual.addElement(rs.getString("datParto"));  

              LinhaAtual.addElement(rs.getString("datSecagem"));  

              LinhaAtual.addElement(rs.getString("sexoCria")); 
              
              LinhaAtual.addElement(rs.getString("datVacina"));
        
    } catch (SQLException sqlex) { 
         JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
         "Erro", JOptionPane.ERROR_MESSAGE);
         
    } catch (Exception ex) { 
         JOptionPane.showMessageDialog(this, "Erro inesperado!\n" + ex,
         "Erro", JOptionPane.ERROR_MESSAGE);
   } 
   
     return LinhaAtual;   
     
  }  // fim do vector  [/code]

A segunda aba é praticamente a mesma coisa, só muda a tabela do banco.

Acho que é no scroller mesmo mas antes não apontava excessoes, por isso não tenho certeza.

Eu preciso de uma ajuda com isso.
Abraços.
Obrigado.

Entendi o que eu fiz de errado acima.

Depois de repensar muito cheguei a uma conclusão:


// o erro estava aqui:

p1.add(p1Consulta, BorderLayout.NORTH);
      //p1.add(scroller, BorderLayout.CENTER);  // *** foi adicionado no método "buscaTabela"
      p1.add(pBotoes, BorderLayout.SOUTH); 

Foi adicionado bem aqui:

 tabela = new JTable(linhas, cabecalho);
            tabela.setFont( f );
            
            scroller = new JScrollPane(tabela); 
            p1.add(scroller, BorderLayout.CENTER);  /** achei que se adicionasse aqui, apontaria 
                    excesão mas não.   Agora está tudo certo.
            
            validate();   
            st.close(); 

Só tem um problema na segunda aba.
Está apontando NullPointerException :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at consulta.buscaTabela2(consulta.java:324) at consulta.access$100(consulta.java:37) at consulta$2.actionPerformed(consulta.java:243) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

O banco da tabela2 é esse:

[code]
// Tabela2: “Vacinas”

create table vacinas (codVacina int(8) not null auto_increment, nomeVacina varchar(30),
diaVacina int(2), mesVacina varchar(10), anoVacina int(4),
primary key (codVacina));

A segunda aba é a mesma coisa que a primeira, só muda a tabela do banco.
Vejam a segunda aba como fica:

private JComponent ptela2() {
          
       JPanel p2Consulta = new JPanel(new FlowLayout());
          labCons2 = new JLabel("Código do gado");
           fieldCons2 = new JTextField(15);
           //fieldCons2.setText("");
          botOK2 = new JButton("OK");
          botOK2.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  buscaTabela2();
                }
            });  
            
         p2Consulta.add(labCons2);
         p2Consulta.add(fieldCons2);
         p2Consulta.add(botOK2);
         
         
          JPanel p2 = new JPanel(new BorderLayout());
          
          JPanel pBotoes2 = new JPanel(new BorderLayout());
          
       JPanel p2Bot2 = new JPanel(new BorderLayout());
       JButton botSalvar2 = new JButton("Salvar");
       JButton botImprimir2 = new JButton("Imprimir");
       p2Bot2.add(botSalvar2, BorderLayout.WEST);
       p2Bot2.add(botImprimir2, BorderLayout.EAST);
       
       JPanel pBotAtual2 = new JPanel(new BorderLayout());
       JButton bAtual2 = new JButton("Atualizar");
       pBotAtual2.add(bAtual2, BorderLayout.WEST);
       
       pBotoes2.add(pBotAtual2, BorderLayout.WEST);
       pBotoes2.add(p2Bot2, BorderLayout.EAST);
   
         
       /**  buscaTabela2();   // chamada do método "buscaTabela2()"
        *  será chamado através do texto digitado no textField2 e pressionado o botão "ok2"
        */
         
         p2.add(p2Consulta, BorderLayout.NORTH);
   // p2.add(scroller2, BorderLayout.CENTER);  foi adicionado ao método "buscaTabela2", pois causava a excessão: "NullPointerException".
         p2.add(pBotoes2, BorderLayout.SOUTH); 
      
         //return tabela2;  // se fosse apenas a tabela e nada mais
         return p2;
      }   
            
      
  private void buscaTabela2() {   
    /** inicialização de conexão ao banco  ****/
      String url = "jdbc:mysql://localhost/gado";   
      String usuario = "root";   
      String senha   = "2017";   
      try {   
         Class.forName("com.mysql.jdbc.Driver");   
          con2 = DriverManager.getConnection(url, usuario, senha);   
       } catch (Exception e) {   
          JOptionPane.showMessageDialog(null, "Conexão não estabelecida!\n" + e, 
          "Erro", JOptionPane.ERROR_MESSAGE);   
       }   
         
     Statement st2;   
     ResultSet rs2;   
     try {   
       Vector cabecalho2 = new Vector();
       Vector linhas2 = new Vector();
        st2 = con2.createStatement();   

 // Selecionando apenas vacinas  ****
        String tableName2 = "vacinas";
        rs2 = st2  .executeQuery("SELECT codVacina, nomeVacina, diaVacina, mesVacina, anoVacina FROM " +
        tableName2 + " WHERE codVacina = " + fieldCons2.getText() + ";");
        //"Vacinas v WHERE v.codproduto NOT IN (SELECT v.codprod FROM vendas v) ");
        
            rs2.next();  
            
            ResultSetMetaData rsmd2 = rs2.getMetaData();
            
            for (int i = 1; i <= rsmd2.getColumnCount(); ++i)   
               cabecalho2.addElement(rsmd2.getColumnName(i)); 
               
            do {   
               linhas2.addElement(proximaLinha2(rs2, rsmd2)); 
            } while (rs2.next());  
            
            tabela2 = new JTable(linhas2, cabecalho2);
            tabela2.setFont( f );
            
            scroller2 = new JScrollPane(tabela2);       
            p2.add(scroller2, BorderLayout.CENTER);
            
            validate();   
            st2.close(); 
            
         } catch (SQLException sqlex) {
             
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
         }   
         
      }   
  
          
      private Vector proximaLinha2(ResultSet rs, ResultSetMetaData rsmd) {   
          
         Vector LinhaAtual2 = new Vector(); 
         
         try {   

                  LinhaAtual2.addElement(rs.getInt("codVacina")); 

                  LinhaAtual2.addElement(rs.getString("nomeVacina"));

                  LinhaAtual2.addElement(rs.getInt("diaVacina"));  

                  LinhaAtual2.addElement(rs.getString("mesVacina"));   

                  LinhaAtual2.addElement(rs.getInt("anoVacina"));  

            
        } catch (SQLException sqlex) { 
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
        } catch (Exception ex) { 
             JOptionPane.showMessageDialog(this, "Erro inesperado!\n" + ex,
             "Erro", JOptionPane.ERROR_MESSAGE);
       } 
       
         return LinhaAtual2;   
         
      }  // fim do vector    

Eu preciso resolver isso. Agradeceria por uma ajuda.

Abraços.

Obrigado.

Já resolvi.