Ajude-me por favor...Erro: java.lang.NullPointerException

6 respostas
karolynareis

Oi...

Estou tentanto fazer uma agenda eletrônica e armazenando esses valores num vetor...ele não compila e "roda"...só que depois de eu informar o 1º nome e dar enter..ele dá o erro java.lang.NullPointerException...

Vou colocar o código e suas duas classes:

::Aqui é a classe main

import java.util.Scanner;

public class MainAgendaEletronica {

   public static void main(String args []){
   
   	AgendaEletronica[] ae = new AgendaEletronica[5];
   	
   	Scanner ler = new Scanner(System.in);
   	
   	for (int i=0;i<5;i++){
   	
	   	System.out.println("Informe o nome");
	   	String nome=ler.next();
	   	ae[i].setNome(nome);
   	}
   	
   	for(int i=0;i<5;i++){ 	
   	
   	   System.out.println("o Nome é: "+ae[i].getNome());
   	
   	}
   }
    
    
}

:: Agora a Classe "modelo", como vcs quiserem chamar...

public class AgendaEletronica {

	private String nome;
//	private String telefone;
	
	
	public String getNome(){
		
		return this.nome;
	}
	
	public void setNome(String nome){
		
		this.nome=nome;
		
	}
    
  /*  public String getTelefone(){
    	
    	return this.telefone;
    }
    
    public void settelefone(String telefone){
    	
    	this.telefone=telefone;
    }*/
    
    
}

Valeu pela atenção gente.. :)

6 Respostas

thiago.correa

Oi, o problema é o seguinte, quando você cria um array (seja ele de objetos ou de tipos primitivos como int por exemplo) eles possuem o valor padrão, que para objetos é null e para tipos primitivos é 0.

No teu caso, antes de usar qualquer posição do teu array, você deve inicializar o objeto que está naquela posição

Resumindo

ae[i] = new AgendaEletronica();
        ae[i].setNome(nome);

Bom era isso!

karolynareis

Valeu pela ajuda! Funcionou!!! :smiley:

Então toda vez, que eu for usar um vetor eu terei que inicializá-lo, né?!

Essa forma seria para iniciar um objeto…se fosse primitivo eu teria q colocar o valor diretamente…?!

Assim jogar o valor direto…

ex: vet[0]=5;

Thiago_Luis

karolynareis:
Valeu pela ajuda! Funcionou!!! :smiley:

Então toda vez, que eu for usar um vetor eu terei que inicializá-lo, né?!

Essa forma seria para iniciar um objeto…se fosse primitivo eu teria q colocar o valor diretamente…?!

Assim jogar o valor direto…

ex: vet[0]=5;


Olá, tudo bom?

Então, quando vc cria um vetor de tipor primitivos, por exemplo int, é só fazer assim:

int[] vet = new int[5];

Ele já seta todas as posições do vetor com 0. Daí não precisa setar todas as posições uma a uma. Imagina se fossem 200 posições :shock: , a menos é claro que vc utilize uma estrutura de repetição, mas isso seria horrível :wink:

Abraço

karolynareis

Ah sim…eu fiquei imaginando como seria isso msm…uma a uma…iria dar uma dor de cabeça… :wink:

Obrigada pela ajuda… :smiley:

thiago.correa

Só para constar! Se fosse 200 posições e você quiser inicializá-lo com um valor diferente de 0 é só fazer o seguinte

public static void main(String[] args) { int[] i = new int[200]; Arrays.fill(i, 10); }

karolynareis

Bom..eu entendi..mas fiquei confusa com uma coisa...

Depois da grande ajuda de vcs, consegui fazer aquela agenda funcionar.. :D

E resolvi partir para implementá-la através do swing...ela está quase funcionando...só que é justamente na hora de armazenar no vetor que estou me embolando...

Se liga... 8)

::Classe que eu achava que seria a única a ser feita..

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class AgendaEletronica extends JFrame {
	
	private JLabel lblNome;
	private JTextField txtNome;
	private JLabel lblTelefone;
	private JTextField txtTelefone;
	private JButton btnAdicionar;
	private JButton btnExcluir;
	private JButton btnAtualizar;
    
    //-------tela------
    public AgendaEletronica(){
    	
    	lblNome=new JLabel("Nome: ");
    	txtNome=new JTextField();
    	lblTelefone=new JLabel("Telef.: ");
    	txtTelefone=new JTextField();
    	btnAdicionar=new JButton("Adicionar");
    	btnExcluir=new JButton("Excluir");
    	btnAtualizar=new JButton("Atualizar");
    	
    	
    	getContentPane().setLayout(new FlowLayout());
    	
    	setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    	setResizable(false);
    	setSize(230,160);
    	setLocationRelativeTo(null);
    	setTitle("Agenda Eletrônica");
    	
    	getContentPane().add(lblNome);
    	getContentPane().add(txtNome);
    	getContentPane().add(lblTelefone);
    	getContentPane().add(txtTelefone);
    	getContentPane().add(btnAdicionar);
    	getContentPane().add(btnExcluir);
    	getContentPane().add(btnAtualizar);
    	
    	txtNome.setColumns(13);
    	txtTelefone.setColumns(13);
    	
    	
    	//------evento----
    	btnAdicionar.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent ev){
    		
    			String n=txtNome.getText();
    			String t=txtTelefone.getText();
    			
    	        System.out.println(n+" "+t);		
    	        	
    	       	dado[]=new Dados();
    	       	dado[]=setNome(n);
    	       	dado[]=setTelefone(t);
    	       	
    	       	dado[]=getNome(n);
    	       	dado[]=getTelefone(t);
    	       	
    	       	System.out.println("Tirando do vetor temos:"+n+" "+t);
    	
    		}
    		
    	});
    	
    }
     
    //-------------main----------
    public static void main(String[] args) {
    	
      	Dados[] dado = new Dados[10];
    	
    	
    	
    	
    	new AgendaEletronica().setVisible(true);
    }
}
::Classe que precisei fazer para completar.. :cry:
public class Dados {

    private String nome;
    private String telefone;
    
    
    public void setNome(String nome){
    	
    	this.nome=nome;
    }
    
    public String getNome(){
    	
    	return this.nome;
    }
    
    public void setTelefone(String telefone){
    	
    	this.telefone=telefone;
    }
    
    public String getTelefone(){
    	
    	return this.telefone;
    }
    
    
    
}

Alguém entendeu por que não está reconhece dado[]=new Dado() e as outras 4 linhas abaixo?

Eu não estou entendo como devo fazê-lo..por enquanto só estou tentando aramazenar os dados dentro do vetor e depois recuperá-los, assim eu vejo se está funcionando..

:lol:

Criado 9 de junho de 2009
Ultima resposta 9 de jun. de 2009
Respostas 6
Participantes 3