NullPointerException porque?

9 respostas
L

Olá pessoal.

Estou escrevendo um programa em Java para guardar o horário de chegada de estagiários onde trabalho, porém
estou com um problema nas linhas 18, 21 e 24 do meu Main. Não estou conseguindo descobrir o porque do NullPointerException.
O código está logo abaixo em 3(três) classes.

package hybye;


import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) throws IOException {

        String temp = "";
        Dados user = new Dados();

        SimpleDateFormat time = new SimpleDateFormat("dd/MM/yyyy - hh:mm");

        while (user.getSituacao().equals("")){
            user.setSituacao(JOptionPane.showInputDialog(null, "Situação: (Ex.: Chegada ou Saida, sem acentos.)"));
        }
        while (user.getNome().equals("")){
            user.setNome(JOptionPane.showInputDialog(null, "Nome: "));
        }
        while (user.getDepartamento().equals("")){
            user.setDepartamento(JOptionPane.showInputDialog(null, "Departamento: "));
        }
        
        temp = "\n\n" + user.getSituacao()+ "\n" + user.getNome()+" - "+ user.getDepartamento() + "\n" + time.format(new Date());

        Arquivo arq = new Arquivo();
        arq.gravar(temp);

        JOptionPane.showMessageDialog(null, user.getSituacao() + " gravada com sucesso!");

    }

}


//==========================================================================================

package hybye;

public class Dados {

    private String nome;
    private String departamento;
    private String situacao;

    public Dados(){
    }

    public Dados(String nome, String departamento, String situacao){
        this.nome = nome;
        this.departamento = departamento;
        this.situacao = situacao;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDepartamento() {
        return departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

}


//=============================================================================================

package hybye;

import java.io.*;

public class Arquivo {

    private String texto;

    public Arquivo(){
    }
    
    public Arquivo(String texto){
        this.texto = texto;
    }

    public void gravar(String texto) throws IOException{

        File arquivo = new File("arquivo.txt");
        FileOutputStream fos = new FileOutputStream(arquivo,true);
        fos.write(texto.getBytes());
        fos.close();
    }
}

Se alguém souber o porque do erro, me diga.

Abraços.

9 Respostas

ViniGodoy

Só existe uma razão para o null pointer exception. Você está tentando acessar um método de um objeto nulo. Felizmente é um erro fácil de detectar. Basta usar um depurador.

Uma coisa. Se o usuário pressionar o botão cancelar num JOptionPane, ele retornará null, e não uma String vazia.

L

Mas como eu posso resolver isso?
preciso de uma solução…

sowyer

É simples… faça o que o ViniGodoy falou… só depurar.

Execute linha a linha, marque os breaks e você verá … dê especial atenção a instancia user, já que o problema inicia na linha 18.

vinnysoft

Acredito que você não tenha inicializado o valor Situacao do seu objeto user.

L

Pessoal, Consegui resolver.
Muito simples, porém não sei dizer se seria uma má prática de programação, inicializei
os atributos da classe Dados com vazio("").

Ex.:

private String nome = "";
private String departamento = "";
private String situacao = "";

Com relação ao problema do usuário apertar "Cancelar"e o JOptionPane retornar null, gostaria de saber
se tem como alterar para em vez de null ele dar um break.

Obrigado pela ajuda =D
Abraços.

vinnysoft

Não sei se te ajuda, mas quando uso JOptionPane com YES_NO_OPTION, minha lógica sai da seguinte forma:

//A variavel num recebe o resultado do JOptionPane. 
int num = JOptionPane.showConfirmDialog(null, "Confirmar o envio do pedido?",
                          "Pergunta", JOptionPane.YES_NO_OPTION);
//Se o usuario selecionar YES, entao faz a logica. Se selecionar NO, entao nao faz nada.
            if(num == JOptionPane.YES_OPTION)
            {
             //código aqui
            }

Até +!

L

vinnysoft…

ajudou sim… valeu cara =D

vinnysoft

Blz! coloca o tópico como resolvido! :smiley:

Até +!

Daniel_Girotto

lableite:
Pessoal, Consegui resolver.
Muito simples, porém não sei dizer se seria uma má prática de programação, inicializei
os atributos da classe Dados com vazio("").

Ex.:

private String nome = "";
private String departamento = "";
private String situacao = "";

Com relação ao problema do usuário apertar "Cancelar"e o JOptionPane retornar null, gostaria de saber
se tem como alterar para em vez de null ele dar um break.

Obrigado pela ajuda =D
Abraços.

Ao invés de inicializar os atributos com “” , mude a forma com estas fazendo a comparação no while assim:

while (user.getSituacao() == null){} http://aindaapensar.blogspot.com/2007/05/as-diferenas-entre-equal-e-eql.html

Criado 19 de março de 2011
Ultima resposta 20 de mar. de 2011
Respostas 9
Participantes 5