A referencia para um Objeto pode ser perdida !?

11 respostas
RicardoCobain

RESOLVIDO

----------------------------
Olá amigos estou com um problema, meio que estranho...
Está dando um erro de NullPointerException na chamada do metodo setObservador na minha classe Maquina.

Mas ela tem uma condição para verificar se o Objeto passado não é null , mas mesmo assim ocorre o Erro, tambem coloquei essa confição em varios pontos para rastrear esse erro..

[color=red]Vou colocar as partes principais do escopo do erro:[/color]

Na classe MAIN:
private void bAdicionarActionPerformed(java.awt.event.ActionEvent evt) {

    // Depois de selecionar o node eu executo esta açao.
   DefaultMutableTreeNode node = (DefaultMutableTreeNode) selecaoPath.getLastPathComponent();
        if (node.isLeaf()){
            Maquina maquina2 = (Maquina) node.getUserObject(); // pega A referencia do Node Selecionado
            // Maquina maquina2 = new Maquina();  // Com essa funciona.
            System.out.println("[Main onclick]: " + maquina2 + ": " + maquina2.hashCode());
            NetIcon2 icone = new NetIcon2(maquina2);
            icone.addMouseListener(icone);
            pDisplayRede.add(icone);
        }
}
Na classe NetIcon2:
public class NetIcon2 extends JLabel implements MouseListener, Observer 
    public Maquina maquinaLocal;
    {....}
    public NetIcon2(Maquina maquina) {
        inicializarComponente();
        maquinaLocal = maquina;
        this.setHostName(maquinaLocal.getNome());
        this.setIp(maquinaLocal.getIP());
        this.setStatus(maquinaLocal.getStatus());
        this.setDescricao(maquinaLocal.getDescricao());
        
        System.out.println("[NetIcon]: " + maquinaLocal.toString() + " " + maquinaLocal.hashCode());
        System.out.println("[NetIcon]: " + this.toString());
        maquinaLocal.setObservador(this);
    }
Classe Maquina
public class Maquina extends Observable
   {......}
    public void setObservador(Observer observador){
        if (observador == null) System.out.println("Observador == null");
        else {
            System.out.println("[Maquina].setObservador :" + observador.toString());
            System.out.println("[Maquina] Atual: " + this.toString());
            this.addObserver(observador); // [b]O erro é bem aqui[/b]
        }
    }
Quando executo a ActionPerformed em MAIN, ocorre o erro:
[Main onclick]: Google: 7056873
[NetIcon]: Google 7056873
[NetIcon]: jRzNetTools.NetIcon2[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0, {etc...} text=&lt;Html&gt;<b>Google</b><br><font Color=blue>192.169.1.2</font>,verticalAlignment=CENTER,verticalTextPosition=CENTER]
[Maquina].setObservador :jRzNetTools.NetIcon2[,0,0,0x0,invalid,alignmentX=0.0,{etc...} text=&lt;Html&gt;<b>Google</b><br><font Color=blue>192.169.1.2</font>,verticalAlignment=CENTER,verticalTextPosition=CENTER]
[Maquina] Atual: Google
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.util.Observable.addObserver(Observable.java:67)
        at jRzNetTools.Maquina.setObservador(Maquina.java:159)
        at jRzNetTools.NetIcon2.&lt;init&gt;(NetIcon2.java:45)
        at jRzNetTools.Main.bAdicionarActionPerformed(Main.java:464)

A lógica é a seguinte tenho a Classe NetIcon(visual) e Maquina(dados) que implementam um Model-View ( com o pattern Observable)

Bem o contructor do NetIcon recebe uma Maquina e guarda uma referencia dela (em maquinaLocal) e desta maquina chama o metodo setObservador(this); , que é que "ocorre" o erro...

O referencia da maquina parace se perder quando é chamado a:
addObserver(observador); (No caso do objeto retornado do node JTree)
pois se eu comentar essa linha funciona beleza...
so que o Patter Observable n ira funcionar

[color=red][este post foi completamente editado as respostas abaixo podem não fazer sentido.. :?][/color]
Data: 26/07/2007 20:21:33

-------------
Meus deus esse trabalho todo por uma Besteira...
O Problema era no XML , que guardava a estrutura da Rede( com as Maquinas e tal) depois que eu alterei a classe maquina para usar o Observable ele teria que salvar um novo atributo no XML um tal de
<obs/>
Só isso....

11 Respostas

Giulliano

Cara eu não li seu código pois ele esta um tanto quanto complexo…mas respondendo a sua pergunta

um objeto só vai perder a referência se vc construir um um novo objeto do mesmo tipo…ou se vc seta-lo como null…

caso vc tenha a certeza de que esta tudo certo com seu programa…re-instale a JVM…

[/]'s

maquiavelbona

Se o objeto for nulo, aqui ele vai lançar uma exception mesmo:

System.out.println("Maquina.setObservador :" + observador.toString()); if (observador == null) System.out.println("Observador == null");
Pois voce está tentando um objeto que não existe e depois tentando ver se ele é nulo.

Até!

RicardoCobain

maquiavelbona , é você estava certo (em certo ponto) !
Se alterar para:

public void setObservador(Observer observador){ if (observador == null) System.out.println("Observador == null"); else { System.out.println("Maquina.setObservador :" + observador.toString()); addObserver(observador); // O erro ocorre aqui .... } }

Mesmo assim ocorre mesmo erro e no mesmo local !
E eu não acredito que possa ser com a JVM …

Se no evento do JTree ao inves de eu pegar a referencia do node (que é da classe maquina) e mandolo pro NetIcon a contece esse erro , mas quando eu crio uma Maquina qualquer , funciona beleza…

O referencia da maquina parace se perder qaundo é chamado a:
addObserver(observador); (No caso do objeto retornado do node JTree)
pois se eu comentar essa linha funciona beleza…
so que o Patter Observable n ira funcionar

G

Cade o método addObserver()?

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.util.Observable.addObserver(Observable.java:67)
O objeto observador não está nulo, porque você faz …

System.out.println("Maquina.setObservador :" + observador.toString());

e ele printa …

Maquina.setObservador :jRzNetTools.NetIcon2[,0,0,0x0,invalid,al (...)]
RicardoCobain

Ele é Herdado: public class Maquina extends Observable

G

Posta o método … ou ele é herdado de java.util.Observable?

RicardoCobain

O addObserver vc está falando ?!
Eu não sobescrevo ele… E não precisa.
[edit] Re: Sim ele é herdado !

Queria postar as classes… Mas é ENORME é muito complicado…
Mas quem tiver afim de ajudar…
E se quiser participar do desenvolvimento do programa tambem… :smiley:

RicardoCobain

[quote=grustk]Cade o método addObserver()?

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.util.Observable.addObserver(Observable.java:67)
O objeto observador não está nulo, porque você faz …

System.out.println("Maquina.setObservador :" + observador.toString());

e ele printa …

Maquina.setObservador :jRzNetTools.NetIcon2[,0,0,0x0,invalid,al (...)]

Exato, mas na procima linha a esta:
addObserver(observador); Ocorre o erro de NullPointer
Tá ai o Misterio … o.O :?:

… lá vem mais dor de cabeça pela frente… :evil:

RicardoCobain

Vou dar uma organizada no 1 post, pra ver se fica mais facil…

maquiavelbona

Aquilo ali eh a unica coisa que tens da stacktrace?

RicardoCobain

Ocabei de Organizar o Post Principal, para ficar mais claro…

Não mas é o principal os outros não fazem nenhum sentido :roll:

Criado 26 de julho de 2007
Ultima resposta 26 de jul. de 2007
Respostas 11
Participantes 4