Toon posts:

[JAVA] Stackoverflow

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende twee classes:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MouseHandler extends Frame implements MouseListener, ActionListener
{
    MouseHandler(){
      popup = new Popup();      
    }  
}

class Popup extends MouseHandler
{
    JPopupMenu popup; 
    
    Popup(){
    
      popup = new JPopupMenu();   
      JMenuItem exit = new JMenuItem("exit");
      exit.addActionListener(this);
      popup.add(exit);
      add(popup);
      popup.setVisible(false);
    } 
}

de class MouseHandler word aangeroepen in de main van de MainClass, hier staat verder niet veel in.

Probleem is hier dat er een StackOverflow is, dat probleem wordt aangegeven bij het aanroepen van:

popup = new Popup();

Enige ideeen waar de fout kan zitten??
hellup !? :?

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MouseHandler extends Frame implements MouseListener, ActionListener
{
    MouseHandler(){
      popup = new Popup();      
    }  
}

class Popup extends MouseHandler
{
    JPopupMenu popup; 
    
    Popup(){
    } 
}

Wat er gebeurt is dit;
Je MainClass maakt een MouseHandler. Die maakt een nieuwe Popup. Omdat deze MouseHandler extend maakt deze weer een nieuwe MouseHandler. Deze maakt een nieuwe Popup. Deze maakt een nieuwe MouseHandler

Need i go on?

What to do:
Je Popup extend MouseHandler. Het lijkt me dus niet nodig om in je mainclass een MouseHandler te constructen. Gebruik daar gewoon direct de Popup. En haal die

popup = new Popup() uit de constructor van MouseHandler.

success

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

idd, stackoverflow betekend dat er teveel objecten aan worden gemaakt. Wat meestal betekend dat je in een oneindige loop zit ergens.

Hier dus met je constructors.

Verwijderd

Topicstarter
ik heb alleen de mouseHandler nodig in de main,

maarehm ik heb nu hiervoor de oplossing, ik ga zelf daar wel weer een oplossing voor bedenken/vinden.

thanks a lot ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
wasigh: idd, stackoverflow betekend dat er teveel objecten aan worden gemaakt.
Niet helemaal... Bij elke methode wordt er een stukje van de Stack gebruikt voor allerlei variabelen. Dit stukje wordt ook wel een frame genoemd. Als er teveel frames op de Stack staan kan er een stack overflow ontstaan. Dit betekent dus dat er teveel methoden zijn aangeroepen. Meestal krijg je deze fout bij een door een vergissing niet terminerende recursieve methode. Objecten worden op de heap gealloceerd, dus
die kunnen geen stack overflow veroorzaken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op donderdag 29 november 2001 11:11 schreef mbravenboer het volgende:

[..]

Niet helemaal... Bij elke methode wordt er een stukje van de Stack gebruikt voor allerlei variabelen. Dit stukje wordt ook wel een frame genoemd. Als er teveel frames op de Stack staan kan er een stack overflow ontstaan. Dit betekent dus dat er teveel methoden zijn aangeroepen. Meestal krijg je deze fout bij een door een vergissing niet terminerende recursieve methode. Objecten worden op de heap gealloceerd, dus
die kunnen geen stack overflow veroorzaken.
Schaam, schaam. ;(

Je hebt helemaal gelijk :)
maar in dit geval komt het omdat er teveel objecten worden aangemaakt(vind ik)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op donderdag 29 november 2001 11:35 schreef wasigh het volgende:
maar in dit geval komt het omdat er teveel objecten worden aangemaakt(vind ik)
Komen alle objecten (behalve de statics waarschijnlijk) een keer op de stack ?

Als wat mbravenboer zegt (helemaal) waar is, heb jij het (helemaal) fout :+

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op donderdag 29 november 2001 11:38 schreef ACM het volgende:

[..]

Komen alle objecten (behalve de statics waarschijnlijk) een keer op de stack ?

Als wat mbravenboer zegt (helemaal) waar is, heb jij het (helemaal) fout :+
[ik lul me hier wel uit modus]
Elke keer als er een object wordt aangemaakt wordt er een methodo aangeroepen. Aangezien er voordat de methode wordt afgesloten een nieuw object wordt aangemaakt, die weer voordat de constructor methode afgesloten is een nieuw object aan maakt. Blijven er "open" methode's (in dit geval) constructors op de stack staan. Aangezien dit een oneindige loop is en de stack eindig is. Raakt de stack een keer vol met open methode's (in dit geval constructors) waardoor je dus een stackoverflow krijgt.

mijn stelling = "Komt doordat er teveel objecten worden aangemaakt" is in dit geval dus nog steeds juist en een antwoord op de vraag. dat het in de meeste gevallen niet klopt is bijzaak en doet in dit topic niet ter zake
[/ik lul me hier wel uit modus]

(mooie poging toch ;) )

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op donderdag 29 november 2001 11:59 schreef wasigh het volgende:
(mooie poging toch ;) )
Prachtig, behalve dat je dus mensen niet foute informatie zou mogen geven.
Aangezien ze de volgende keer bij een stackoverflow denken, "hee, ik maak teveel objecten, maar ik maak helemaal geen objecten :("

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 29 november 2001 12:02 schreef ACM het volgende:

[..]

Prachtig, behalve dat je dus mensen niet foute informatie zou mogen geven.
Aangezien ze de volgende keer bij een stackoverflow denken, "hee, ik maak teveel objecten, maar ik maak helemaal geen objecten :("
je mot als mod wel het goeie voorbeeld geven :)

Doet iets met Cloud (MS/IBM)


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op donderdag 29 november 2001 12:02 schreef ACM het volgende:

[..]

Prachtig, behalve dat je dus mensen niet foute informatie zou mogen geven.
Aangezien ze de volgende keer bij een stackoverflow denken, "hee, ik maak teveel objecten, maar ik maak helemaal geen objecten :("
[poging 2]
Tja dat is de harde realiteit van jezelf programmeur durven noemen ;)
En in principe is de informatie niet onjuist, hooguit niet volledig ;).
[/poging 2]
recht? dat is iets kroms wat verbogen is ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
wasigh: Schaam, schaam. ;(
Geeft niet, je bedoelde het ook wel goed ;) .
maar in dit geval komt het omdat er teveel objecten worden aangemaakt(vind ik)
Mwah, nee. Het komt niet door de gecreeerde objecten maar door het steeds opnieuw aanroepen van de constructor van die klasse. Dit veroorzaakt een oneindige lijst van methode-aanroepenm -> stack overflow. De gecreerde objecten vormen geen probleem. Hooguit als er een out of memory melding zou komen. Maar dan kan je heel wat objectjes maken ;) .
mijn stelling = "Komt doordat er teveel objecten worden aangemaakt" is in dit geval dus nog steeds juist en een antwoord op de vraag. dat het in de meeste gevallen niet klopt is bijzaak en doet in dit topic niet ter zake
Nee dus. Je bedoelt het wel goed, maar je zegt het fout. Het komt niet doordat er teveel objecten worden aangemaakt, maar omdat er een oneindige lijst methodes wordt aangeroepen. De constructor van de klasse maakt roept namelijk indirect weer zichzelf aan. Er worden dus wel teveel objecten gemaakt, maar dit is niet de oorzaak van de fout. Hooguit is het een niet bedoeld effect van de code :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1