Java.lang.NullPointerException usando objetos como parametro

5 respostas
B

Criei um projeto com uma classe “principal” na qual uso duas classes:

Memoria M = new Memoria();
Interface I = new Interface(M); //M (memoria) é parametro para 
                                              //o construtor

Na classe interface tem (mais ou menos) o seguinte código:

public class Interface {

   Memoria M;

   public Interface ( Memoria Me) {
  
      M = Me;
   }

   public Container createContentPane() {

      //aqui vai um monte de botões, area de texto ... Entre eles:
     
      botao1 = new JButton("Imprimir",new ImageIcon("forward.gif"));
      botao1.addActionListener(
         
         new ActionListener() {
     
              public void actionPerformed(ActionEvent event) {
               

                   System.out.println("" + M.getMemoria(0)); 
                   //getMemoria é um método da classe Memoria                    
              
              }
     
         }
                       
      );
   }
}

O problema é que quando eu faço referência a M.getMemoria() dentro do ActionListener, dá uns erros do tipo “java.lang.NullPointerException” Como faço pra resolver isso? Tenho que apresentar esse projeto na faculdade segunda-feira e já tô ficando meio sem tempo.

Valeu!

5 Respostas

mbjunior

Ao passar este objeto Memoria, vc antes setou os atributos dele, tipo:
M.setMemoria(parametro)???
ou então vc deverá ter um construtor para o objeto Memória assim:

Memoria m = new Memoria(parametros de seu objeto);

seu problema está ocorrendo porque a propriedade de seu objeto passado como parametro para Interface está vazio.

D

Eu alterei ligeiramente o seu exemplo para testar e aqui funcionou redondinho. Talvez seja (arrriscaria: com certeza?) o que o mbjunior disse.

Veja o que eu fiz:

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

public class Teste extends JFrame {

   private Memoria memoria;

   public static void main(String[] args) {
         JFrame f = new Teste(new Memoria(171));
         f.setVisible(true);
   }

   public Teste(Memoria mem) {

      this.memoria = mem;

      setSize(300, 200);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //aqui vai um monte de botões, area de texto ... Entre eles:

      JButton botao1 = new JButton("Imprimir",new ImageIcon("forward.gif"));
      botao1.addActionListener(

         new ActionListener() {

              public void actionPerformed(ActionEvent event) {


                   System.out.println("" + memoria.getMemoria(0));
                   //getMemoria é um método da classe Memoria

              }

         }

      );

      JPanel panel = new JPanel();
      panel.add(botao1);

      getContentPane().add(panel, BorderLayout.NORTH);
   }
}

class Memoria {
    private int m;

    public Memoria(int amount) {
        this.m = amount;
    }

    public int getMemoria(int foo) {
        // ignora foo e retorna m...
        return m;
    }
}

Rodou sem problemas.

mbjunior

“dango”:
Eu alterei ligeiramente o seu exemplo para testar e aqui funcionou redondinho. Talvez seja (arrriscaria: com certeza?) o que o mbjunior disse.

nada mais reforçou o que eu escrevi…
Quando este objeto for passado como parametro, todas suas propriedades que estiverem vazias e forem requisitadas, lançarão a excessão citada acima.

D

É isso aí…
Às vezes acontece… vc está testando pra enviar a resposta e alguém já postou… :slight_smile:

B

Galera, valeu demais!!!
O negócio aqui funcionou beleza!
Tô fazendo uma disciplina de programação orientada a objeto (POO) na faculdade e confesso que sem o guj, os 2 projetos de fim de semestre não teriam saído do papel (a gente tá sem “PROFESSOR”).
“Pagar pau” … só pra quem merece,
Parabéns a todos do fórum!!!

Valeu!

Criado 20 de dezembro de 2003
Ultima resposta 20 de dez. de 2003
Respostas 5
Participantes 3