Newsgroup: it.comp.java
Titolo: Estensioni di classi e java.lang.StackOverflowError

Ho una classe del tipo
public class Pippo extends JFrame {
......
......
    new Pluto();
}
In un altro file ho
public class Pluto extends Pippo {
    ; // la classe č vuota
}
Nel momento in cui faccio partire Pippo, JBuilder mi da questo errore
"java.lang.StackOverflowError"...
Se tolgo la linea new Pluto(); nella classe Pippo l'errore non viene
generato. Perchč?
-- 
############################
Q: Mi saprebbe fare un esempio di
     presente progressivo in inglese?
A: Dream Theater
############################

 ha scritto nel messaggio
news:HNr1c.11432$36.3...@news4.tin.it...

Mi rispondo da solo:
Dal main si deve lanciare l'ultima classe della gerarchia! In questo caso
Pluto() e non Pippo()


Beh non è proprio questa la soluzione. Praticamente io ho una classe Pippo
extends JFrame. All'interno di questa classe c'è un bottone che mi deve far
partire del codice che ho scritto in un'altra classe in un altro file Pluto
extends Pippo (che estende pippo).
FILE1
public static void main(String[] args) {
    Pippo t=new Pippo();
    t.show();
}
FILE2
public class Pippo extends JFrame {
    public JButton b;
    public Pippo() {
        ...
        b=new JButton("a");
        ...
    }
}
FILE3
public class Pluto extends Pippo {
    ...
    b.setText("cambiato");
    ...
}
Come posso aggingere l'actionListener per far si che il pulsante nella
classe Pippo cambi il suo testo tramite un metodo che deve essere non
statico nella classe Pluto ???

 statico nella classe Pluto ???
A parte che mi sembra un po' contorto... :-)
---- begin Pippo.java ----
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Pippo extends JFrame {
   public JButton b = null;
   private Pluto unPluto = null;
   public Pippo() {
      super();
      b = new JButton();
      unPluto = new Pluto(this);
      b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            unPluto.cambiaIlTestoDelBottoneDiPippo("Ciao, bella gioia! " +
System.currentTimeMillis());
         }
      });
      getContentPane().add(b);
   }
}
---- end Pippo.java ----
---- begin Pluto.java ----
public class Pluto {
   private Pippo ilMioPippo = null;
   public Pluto(Pippo ilMioPippo) {
      this.ilMioPippo = ilMioPippo;
   }
   public void cambiaIlTestoDelBottoneDiPippo(String nuovoTesto) {
      ilMioPippo.b.setText(nuovoTesto);
   }
}
---- end Pluto.java ----
---- begin Main.java ----
public class Main {
   public static void main(String[] args) {
      Pippo p = new Pippo();
      p.setSize(new Dimension(250, 100));
      p.setDefaultCloseOperation(p.EXIT_ON_CLOSE);
      p.setVisible(true);
   }
}
---- end Main.java ----
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


... arisnippe....
e secondo te come dovrei organizzare il codice? Il mio obbiettivo è separare
il codice Gui dal codice che fa le operazioni e che modifica la gui. Non
voglio scrivere tutto in un unico file, vorrei capire il meccanismo che
permette di rendere un'applicazione modulare, separando appunto il codice
gui dal codice operativo.

 gui dal codice operativo.
Nel tuo caso, puoi pensare di scrivere una classe che implementi
l'interfaccia ActionListener o (mglio) l'interfaccia Action (il 'codice
operativo') e aggiungere un'istanza di questa classe come listener del tuo
JButton.
Ti consiglio di dare un'occhiata qui
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html
e qui
http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html
Ciao.
