Erro na classe pesquisar_os

Bom dia
De novo eu com os erros que não aconteciam e começam a acontecer, tenho um botão btnOsPesquisar onde através dele chamo a ordem de serviços pelo numero e faço alterações nela se for preciso, só que agora esta dando uma exceção que não dava antes, e eu por ser um pouco novo na programação Java não consigo entender a exceção da forma que é exposta no depurador, mas ja estou estudando para entender estas mensagens, e conto com a ajuda de vocês.
Segue abaixo a mensagem de exceção:

java.lang.NullPointerException
at br.com.Os.telas.TelaOs.pesquisar_os(TelaOs.java:102)
at br.com.Os.telas.TelaOs.btnOsPesquisarActionPerformed(TelaOs.java:595)
at br.com.Os.telas.TelaOs.access$600(TelaOs.java:17)
at br.com.Os.telas.TelaOs$7.actionPerformed(TelaOs.java:444)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

CONSTRUÍDO COM SUCESSO (tempo total: 34 segundos)

Esta exceção acontece no momento em que digito o numero da OS e confirmo.

Segue abaixo o código da classe:

 private void pesquisar_os() {
// A linha abixo cria uma caixa de entrada do tip JOptionPane
String num_os = JOptionPane.showInputDialog("Digite o Numero da Ordem de Serviços!");
String sql = "select * from tblos where numeroos =" + num_os;

try {
    pst = conexao.prepareStatement(sql);
    rs = pst.executeQuery();

    if (rs.next()) {
	txtOs.setText(rs.getString(1));
	txtData.setText(rs.getString(2));
	// Setando os Radio Button
	String rbtTipo = rs.getString(3);
	if (rbtTipo.equals("Orçamento")) {
	    rbtOrc.setSelected(true);
	    tipo = "Orçamento";
	} else {
	    rbtOs.setSelected(true);
	    tipo = "Ordem de Serviços";
	}
	cboOsSit.setSelectedItem(rs.getString(4));
	txtOsEquip.setText(rs.getString(5));
	txtOsDef.setText(rs.getString(6));
	txtOsServ.setText(rs.getString(7));
	txtOsTec.setText(rs.getString(8));
	txtOsValor.setText(rs.getString(9));
	txtCliId.setText(rs.getString(10));
	btnOsAdicionar.setEnabled(false);
	txtCliPesquisar.setEditable(false);
	tblClientes.setVisible(false);

    } else {
	JOptionPane.showMessageDialog(null, "Este número de Ordem de Serviço não esta Cadastrado");
    }

} catch (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e) {
    JOptionPane.showMessageDialog(null, "Campo de variavel numérica, Digitar só Numeros!!");
} catch (Exception e2) {
        e2.printStackTrace();
    //JOptionPane.showMessageDialog(null, e2);
}
}

// Método para alterar uma Ordem de Serviços
private void alterar_os() {
String sql = "update tblos set tipo=?,situacao=?,equipamento=?,defeito=?,servico=?,tecnico=?,valor=? where numeroos=?";
try {
    pst = conexao.prepareStatement(sql);
    pst.setString(1, tipo);
    pst.setString(2, cboOsSit.getSelectedItem().toString());
    pst.setString(3, txtOsEquip.getText());
    pst.setString(4, txtOsDef.getText());
    pst.setString(5, txtOsServ.getText());
    pst.setString(6, txtOsTec.getText());
    pst.setString(7, txtOsValor.getText().replace(",", "."));
    pst.setString(8, txtOs.getText());

    // Validadção dos Campos Obrigatórios
    if ((txtCliId.getText().isEmpty()) || (txtOsEquip.getText().isEmpty()) || (txtOsDef.getText().isEmpty())) {
	JOptionPane.showMessageDialog(null, "Preencha todos os Campos Obrigatórios");

    } else {
	int adicionado = pst.executeUpdate();
	if (adicionado > 0) {
	    JOptionPane.showMessageDialog(null, "Ordem de Serviço Alterada com Sucesso");
	    txtOs.setText(null);
	    txtData.setText(null);
	    txtCliId.setText(null);
	    txtOsEquip.setText(null);
	    txtOsDef.setText(null);
	    txtOsServ.setText(null);
	    txtOsTec.setText(null);
	    txtOsValor.setText(null);
	    btnOsAdicionar.setEnabled(true);
	    txtCliPesquisar.setEditable(true);
	    tblClientes.setVisible(true);
	}
    }
} catch (Exception e) {
        e.printStackTrace();
    //JOptionPane.showMessageDialog(null, e);
}
}

Desde ja agradeço ao Fórum.

O que tem na linha 102 da classe TelaOS?

if (rbtTipo.equals("Orçamento")) { // Esta é a linha 102 onde esta apontando o erro
	    rbtOrc.setSelected(true);
	    tipo = "Orçamento";

Bom dia,

Repare que você está recebendo o num_os como uma String e está tentando fazer uma comparação na sua SQL com = que só aceita tipos numéricos.

Tente assim:

String num_os = JOptionPane.showInputDialog(“Digite o Numero da Ordem de Serviços!”);
int num_os1 = Integer.parseInt(num_os);
String sql = “select * from tblos where numeroos =” + num_os1;

O código foi aceito, mas continua apontando a mesma exceção na mesma linha que agora passou ser a 103, pelo fato de termos incluído a linha:

int num_os1 = Integer.parseInt(num_os);

Está nulo, por isso, invocar o método equals lança o NPE.
Uma boa prática é inverter a forma como está comparando

if("Orçamento".equals(rbtTipo) {

Assim você já evita o NPE (embora não resolva o problema deste objeto estar nulo).

1 curtida

É uma boa dica.
Mas, porque este objeto esta nulo?
não entendo isto.
Pode ser algo nas propriedades?
Onde não mexi em nada.

Provavelmente não existe nada na posição 3 do resultSet

Ok Darlan
Você estava certo, no banco de dados o campo estava vazio, acrescentei la um tipo e voltou a funcionar normalmente, muito Obrigado a você e ao Rodrigo.
Ainda não sei como dar o tópico como resolvido.