Ola Pessoal, eu estou desenvolvendo um sistema, possui varios frames, porem quando estou num frame e clico no botao para abrir uma outra janela da uma mensagem de erro no prompt do netbeans 5, porem a janelas é aberta normalmente.
Alguem sabe me dar uma dica porque ocorre esse erro:
Desde ja , muito obrigado.
java.lang.NullPointerException
at Work_ADMIN.Frm_Tabela2.buscaDados(Frm_Tabela2.java:189)
at Work_ADMIN.Frm_Tabela2.(Frm_Tabela2.java:108)
at Work_ADMIN.Frm_Cidades.(Frm_Cidades.java:45)
at Work_ADMIN.Frm_Principal.abrirJanelaFrm_Cidades(Frm_Principal.java:915)
at Work_ADMIN.Frm_Principal.jButton3ActionPerformed(Frm_Principal.java:518)
at Work_ADMIN.Frm_Principal.access$300(Frm_Principal.java:9)
at Work_ADMIN.Frm_Principal$4.actionPerformed(Frm_Principal.java:118)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Seria melhor se você postasse o código do programa, olhando só a mensagem a única coisa que posso te dizer é que está ocorrendo esse erro porque você está tentando usar um objeto nulo
Rpz esta excecao ocorre qnd vc usa uma variavel q nao esta referenciando algo, ela esta c/ valor NULL, agora tem q saber q variavel ta como NULL. Provavelmente deva ser algo como alguma variavel q esteja pegando os dados p a frame q abre e c isto ta NULL, tem q analisar.
Pessoal segue abaixo o codigo, eu fiz o teste e comprovei que o problema esta neste metodo abaixo, pois preciso por ele 2 vezes no programa.
jScrollPane1.setViewportView(jTable1);
Se voces repararem ele aparece 2 vez no programa, uma vez ele tem a função de mostrar o SELECT = “SELECT ENDERECO FROM TESTE”; e tambem este metodo se encontra no metodo buscaDados(), pois ai ele tem a função de mostrar o SELECT = “SELECT NOM_USUARIO FROM TESTE”;
Alguem tem uma dica como eu poderia acabar com esse erro?
public class Frm_Tabela2 extends javax.swing.JFrame
{
private String URL;
private Connection con;
public ResultSet res;
public Statement st;
public ResultSetMetaData rsmd;
public JButton jButton1;
public JButton jButton2;
public JButton jButton3;
public JLabel jLabel1;
public JTable jTable1;
public JTextField jTextField1;
public JScrollPane jScrollPane1;
Metodo metodo;
public Frm_Tabela2()
{
setSize(800,500);
setLocationRelativeTo(null);
jLabel1 = new JLabel();
jButton2 = new JButton();
jTextField1 = new JTextField();
jButton3 = new JButton();
/*
*--------------------------------------------------------------------------------
*PAINEL panelTopo
*/
JPanel painelTopo = new JPanel();
painelTopo.setLayout(new FlowLayout(FlowLayout.LEFT));
painelTopo.setLayout(null);
painelTopo.setSize(800,60);
jLabel1.setText("Localizar");
jLabel1.setBounds(10,10,60,25);
jTextField1.setBounds(90,10,550,25);
jButton1 = new JButton("Localizar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String SELECT = "SELECT NOM_USUARIO FROM TESTE";
conectar();
buscaDados(SELECT);
}
});
jButton1.setBounds(660,10,100,25);
painelTopo.add(jLabel1);
painelTopo.add(jTextField1);
painelTopo.add(jButton1);
/*
*---------------------------------------------------------------------------
*PAINEL painelCentro
*/
JPanel painelCentro = new JPanel();
painelCentro.setLayout(null);
conectar();
String SELECT = "SELECT ENDERECO FROM TESTE";
buscaDados(SELECT);
jScrollPane1 = new JScrollPane();
jScrollPane1.setBounds(10, 80, 750, 280);
jScrollPane1.setViewportView(jTable1);
painelCentro.add(jScrollPane1);
/*
*---------------------------------------------------------------------------
*Painel panelBaixo
*/
JPanel painelBaixo = new JPanel();
painelBaixo.setSize(800,60);
painelBaixo.setLayout(new FlowLayout(FlowLayout.RIGHT));
jButton2.setText("Cadastro Novo");
jButton3.setText(" Voltar ");
painelBaixo.add(jButton2);
painelBaixo.add(jButton3);
/*
*--------------------------------------------------------------------------------
*/
Container painelPrincipal = getContentPane();
painelPrincipal.setLayout(new BorderLayout());
painelPrincipal.add(painelTopo );
painelPrincipal.add(painelCentro);
painelPrincipal.add(painelBaixo, BorderLayout.SOUTH);
}
/*
*Metodo para buscar os dados da tabelas e passar para o JTable
*/
public void buscaDados(String SELECT)
{
Vector cabecalho;
Vector linhas;
String SQL = SELECT;
cabecalho = new Vector();
linhas = new Vector();
String ccol1 = "1";
try
{
res = st.executeQuery(SQL);
res.next();
rsmd = res.getMetaData();
cabecalho.addElement( ccol1 );
do
{
linhas.addElement(proximaLinha(res, rsmd));
}
while(res.next());
jTable1 = new JTable(linhas,cabecalho);
jScrollPane1.setViewportView(jTable1);
validate();
st.close();
}
catch(Throwable ex)
{
ex.printStackTrace();
}
}
private Vector proximaLinha(ResultSet rs , ResultSetMetaData rsmd)
{
Vector linhaAtual = new Vector();
try
{
int i;
for(i=1; i<=rsmd.getColumnCount(); ++i)
switch(rsmd.getColumnType( i ))
{
case Types.VARCHAR:
linhaAtual.addElement(rs.getString( i )); break;
case Types.TIMESTAMP:
linhaAtual.addElement(rs.getDate( i )); break;
}
}
catch(Throwable ex) {}
return linhaAtual;
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Frm_Tabela().setVisible(true);
}
});
}
public void conectar()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
URL = "jdbc:oracle:thin:HDC/HDC@localhost:1521:OLTP";
con = DriverManager.getConnection(URL);
st = con.createStatement();
}
catch(Throwable ex)
{
ex.printStackTrace();
}
}
Acho q eu sei pq ta dando esta excecao. Veja se eh isto q ta acontecendo e diz se resolveu. O problema eh o metodo buscaDados() esta acessando o componente jScrollPane1 antes dele ser instanciado e por isso ta dando a excecao “NullPointerException”, pq ele ainda n esta intanciado, logo esta c/ valor NULL. Para resolver eh so chamar buscaDados() dps do new() do jScrollPane1, e assim pode tirar o outro jScrollPane1.setViewportView(jTable1) do construtor da interface, creio eu q seja isso, teste ai e responda se pegou e n se eskeca de me qualificar.
Vc so vai mexer nesta parte do codigo do construtor do Frm_table2: