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.
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.
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;
}
[quote=“dango”]Eu alterei ligeiramente o seu exemplo para testar e aqui funcionou redondinho. Talvez seja (arrriscaria: com certeza?) o que o mbjunior disse.
[/quote]
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.
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!!!