Erro na tela de login

Pessoal, venho novamente pedir a ajuda de voces para solucionar um erro que encontra na tela de login no projeto que estou desenvolvendo em desktop no netbeans, pois sou iniciante em java e não consegui resolver este erro. Aqui esta o codigo da tela de login:

package sisvenda;

import java.sql.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
import sisvenda.conexao.Conexao;

/**
 *
 * @author  João
 */
public class Login extends Usuarios {
    Conexao banco_usuarios;
    int conta = 0;
    
    /** Creates new form Login */
    public Login() {
        initComponents();
        banco_usuarios = new Conexao();
        banco_usuarios.abrirBDConn();
        
    }
    
    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfLogin = new javax.swing.JTextField();
        tfSenha = new javax.swing.JPasswordField();
        btAcessar = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Tela de Login");
        setBackground(new java.awt.Color(255, 255, 255));
        setFont(new java.awt.Font("Arial", 0, 14));
        jPanel1.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel1.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel1.setForeground(new java.awt.Color(0, 0, 153));
        jLabel1.setText("Login :");

        jLabel2.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel2.setForeground(new java.awt.Color(0, 0, 153));
        jLabel2.setText("Senha :");

        tfLogin.setFont(new java.awt.Font("Arial", 0, 14));

        tfSenha.setFont(new java.awt.Font("Arial", 0, 14));

        btAcessar.setFont(new java.awt.Font("Arial", 1, 14));
        btAcessar.setForeground(new java.awt.Color(0, 0, 204));
        btAcessar.setText("Acessar");
        btAcessar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAcessarActionPerformed(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.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(tfSenha, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                            .addComponent(tfLogin, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(btAcessar)
                        .addGap(27, 27, 27))))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(tfLogin, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(tfSenha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(27, 27, 27)
                .addComponent(btAcessar)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jTextField1.setEditable(false);
        jTextField1.setFont(new java.awt.Font("Arial", 1, 24));
        jTextField1.setForeground(new java.awt.Color(204, 0, 0));
        jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField1.setText("Tela de Acesso ao Sistema de Vendas");
        jTextField1.setBorder(null);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(435, 435, 435)
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(287, 287, 287)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(295, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(67, 67, 67)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(162, 162, 162)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(350, Short.MAX_VALUE))
        );
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-1024)/2, (screenSize.height-780)/2, 1024, 780);
    }// </editor-fold>                        
    
    private void btAcessarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       if ( tfLogin.getText().equals("") || tfSenha.getPassword().equals(""))
            JOptionPane.showMessageDialog(null,"Os campos não podem ser vazios");
       else
       {
           if (conta <= 1)
           {
               try {
           
                    String sSQL = "SELECT * FROM usuarios WHERE login like '"
                            + tfLogin.getText() + "' AND senha like '" + tfSenha.getPassword()+ 
                            "' AND (nivel='adm' OR nivel='comum')";
                    banco_usuarios.oExecuta(sSQL);
                   if(banco_usuarios.oExecuta().first())
                    {
                        JOptionPane.showMessageDialog(null, "Olá, Bom Trabalho");
                        new sisvenda.Principal().show();
                        dispose();
                    }
                    else
                    {
                        conta++;
                        if(conta == 1)
                           JOptionPane.showMessageDialog(null, "Login ou Senha não conferem; Você só tem mais uma chance ");
                        else
                        {
                            JOptionPane.showMessageDialog(null, "Usuário inabilitado para o Sistema de Vendas ");
                        }
                            dispose();
                        }
                     }catch(Exception e){
		e.printStackTrace();     
           }
           }
       }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Login().setVisible(true);
            }
        });

E quando executo esta tela gera o erro:

init:
deps-jar:
compile:
run:
Conexão efetuada com sucesso!!
Conexão efetuada com sucesso!!
java.lang.NullPointerException
at sisvenda.Login.btAcessarActionPerformed(Login.java:154)
at sisvenda.Login.access$000(Login.java:20)
at sisvenda.Login$1.actionPerformed(Login.java:69)
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:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

EXECUTADO COM SUCESSO (tempo total: 14 segundos)

Por favor me ajudem…l
Desde ja agradeco.

Mostra pra gente o que tem na linha 154 do seu Login.java, o erro está ali… veja:

java.lang.NullPointerException at sisvenda.Login.btAcessarActionPerformed(Login.java:154)

na linha 154 tem isso aqui:

[b] if(banco_usuarios.oExecuta().first())[/b]

Boa noite a todos.

O erro está sendo gerando dentro do método btnAcessar conforme abaixo:


private void btAcessarActionPerformed(java.awt.event.ActionEvent evt) {                                            
       if ( tfLogin.getText().equals("") || tfSenha.getPassword().equals(""))  
            JOptionPane.showMessageDialog(null,"Os campos não podem ser vazios");  
       else  
       {  
           if (conta <= 1)  
           {  
               try {  
             
                    String sSQL = "SELECT * FROM usuarios WHERE login like '"  
                            + tfLogin.getText() + "' AND senha like '" + tfSenha.getPassword()+   
                            "' AND (nivel='adm' OR nivel='comum')";  
                    banco_usuarios.oExecuta(sSQL);  
                   if(banco_usuarios.oExecuta().first())  
                    {  
                        JOptionPane.showMessageDialog(null, "Olá, Bom Trabalho");  
                        new sisvenda.Principal().show();  
                        dispose();  
                    }  
                    else  
                    {  
                        conta++;  
                        if(conta == 1)  
                           JOptionPane.showMessageDialog(null, "Login ou Senha não conferem; Você só tem mais uma chance ");  
                        else  
                        {  
                            JOptionPane.showMessageDialog(null, "Usuário inabilitado para o Sistema de Vendas ");  
                        }  
                            dispose();  // Pelo menos aqui no GUJ, esta a linha 154 onde está sendo gerado o erro
                        }  
                     }catch(Exception e){  
        e.printStackTrace();       
           }  
           }  
       }  
    }

Sei que a linha 154 aqui no GUJ não corresponde exatamente a linha 154 do seu código, no entanto, levando em consideração que seja a mesma linha, o método dispose() está presente no JFrame, contudo não está presente em JPanel, assim sendo, o código abaixo:

public class Login extends Usuarios {  
    Conexao banco_usuarios;  
    int conta = 0; 
    ......
    ......

Me leva a fazer a seguinte pergunta:

A classe Usuários extende (Herda) de que; JFrame ou JPanel :?: :?: :?:

Provavelmente o método oExecuta() está retornando um objeto nulo.

Posta o código da sua classe Conexao.