Archief - Java Swing

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gurdt

Legacy Member
Ik werk voor het eerst aan een project in Java in combinatie met Swing (het gaat om het bordspel Risk).
De GUI bevat landen die oplichten als je er met de cursor over beweegt. De GUI vangt ook verschillende click-events op.

Nu hebben we echter een klein probleempje. Wanneer we een tijdje bezig zijn begint het spel lichtjes te 'laggen' en daarna gaan input-events zoals mouse-clicks zeer moeizaam of zelfs niet.

Zou het kunnen dat er in Swing een soort van input-stack is die vol kan geraken en die je zelf moet leegmaken?

Wij zijn allemaal zeer leek in Java in combinatie met Swing en google vertelt niet meteen veel. Maar ik ben er zeker van dat hier een paar goeroe's rondlopen die dit probleem herkennen :)

Timmos

Legacy Member
Zijn er misschien zeer veel componenten die luisteren naar die inputevents? Het zou kunnen dat je na verloop van tijd misschien teveel luisteraars hebt geregistreerd die allemaal hun code moeten afhandelen bij een muisklik?

MilM

Legacy Member
Je moet ervoor zorgen dat referenties naar objecten enkel bestaan wanneer je ze nodig hebt.
(zodat java de objecten automatisch opruimt als er geen referenties meer zijn naar dat object)

Wat doe je precies bij het optreden van het mouse event?
Gebruik je binnen dat mouse event objecten die erbuiten gedefinieerd zijn en blijven groeien bij elke click?

edit:
Timmos zei:
Het zou kunnen dat je na verloop van tijd misschien teveel luisteraars hebt geregistreerd die allemaal hun code moeten afhandelen bij een muisklik?
Dit is een voorbeeld hiervan.

Stel dat je bij elke muisklik een nieuwe luisteraar aanmaakt (om welke reden dan ook) en die nieuwe luisteraar toevoegt aan een object zonder de vorige luisteraars (die je niet meer nodig hebt) te verwijderen. Aangezien de referenties naar die vorige luisteraars nog steeds bestaan, zal JAVA ze niet verwijderen en heb je een groeiende collectie van luisteraars.

Om maar het principe aan te tonen.

Gurdt

Legacy Member
Het probleem is al opgelost (niet door mij, door één van de andere 5 met wie ik het project doe). En de deadline is al voorbij dus geen probleem meer ;)

Ik weet niet precies waar het probleem aan lag, het was idd iets met objecten die nog aan het luisteren waren maar meer informatie kan ik niet geven :D in dat aspect van het project was ik niet super-actief (het was een project van +- 60 klassen ofzo :))

MetalG

Legacy Member
projects, got to love it x)

hier een autoverhuurbedrijf in asp.net komt echt veeel bij kijken x')

froginvasion

Legacy Member
kan iemand hier duidelijkere uitleg over geven of een simpel voorbeeld in welke gevallen het kan komen dat de vorige luisteraars achterblijven en hoe je deze verwijdert?

Kan handig zijn om te weten.

Gurdt

Legacy Member
Ik denk dat het iets te maken had met het feit dat ge in Java nie zo effe "delete" kunt doen dacht ik.

_DKsissor_

Legacy Member
alle verbindingen met een object verbreken zodat het opgeruimd kan worden? :unsure:
Als ge data hebt waar niemand naar verwijst zal de garbage collector die opruimen en dat is the way to go als ge objecten wilt kwijtgerake:p

Gurdt

Legacy Member
In ons geval was het bv een land dat zelf een listener was. Da land kon ge nie ff weg doen zomaar. Dus de garbage collector kwam niet van pas. Ik zal eens vragen wat uiteindelijk de oplossing was (als ik ze zie, tis blok nu :()

MilM

Legacy Member
Gurdt zei:
Ik denk dat het iets te maken had met het feit dat ge in Java nie zo effe "delete" kunt doen dacht ik.

Jawel.

addXListener -> removeXListener

Bijv:
addActionListener -> removeActionListener

Gurdt

Legacy Member
Het zal zoiets wel geweest zijn ;)

Mijn ervaring trouwens: Java is natuurlijk heerlijk, maar als ik moet kiezen tussen Swing en Qt, heb ik snel gekozen :') (Qt dus)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan