Archief - [PROG]-[JAVA] een domme vraag

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.

diem

Legacy Member
hej ,

ik heb een raar probleem met java , als ik een java applet maak (alleen nog maar bij applet getest) herhaalt deze public void paint steeds :s het is al even geleden dat ik nog met java gewerkt heb, maar ik dacht niet dat dit normaal was, of wel ?

vb van een simpel appletje (misch doe ik wel iets fout)

Code:
import java.awt.Graphics;
import javax.swing.JApplet;

public class begintest extends JApplet
{
	public int teller = 0;

    public void init()
    {
		//setSize (1000,650);
		//setVisible (true);
    }

    public void paint(Graphics g)
    {
		super.paint(g);
		teller++;
		g.drawString (" " + teller , 40 , 40 );
		repaint () ;
    }
}

het resultaat hiervan is dus een getal die zeer snel op telt , dit kan toch niet :s

alvast bedankt :)

QplQyer

Legacy Member
Dat kan wel gebeuren als je in je paint () methode repaint () oproept, aangezien repaint () paint () weer gaat oproepen die dan weer repaint () oproept, ...

Met andere woorden: je hebt een oneindige lus gegeneerd door die repaint () in je paint () te zetten.

Bij Java werkt het als volgt:
Een deel van het scherm wordt door een ander scherm uit het zicht gehaald, vervolgens komt je Java prog weer in beeld. Wat volgt is dat Java dit zal opmerken, de coordinaten van het gebied dat uit zicht was bepaalt en de repaint ()-methodes oproept van de Componenten die opnieuw getekend moeten worden (omdat ze ge-obscured waren). Repaint () zorgt voor een paar dingen die benodigd zijn om te kunnen tekenen en roept dat Paint () op met een Graphics-object.

In Paint () moet je dus enkel aangeven hoe je Component naar het scherm moet worden uitgeschreven.
Repaint () oproepen moet je enkel doen als je iets wijzigt aan je Component dat zichtbaar moet gewijzigd worden.

*edit* bovenstaande uitleg is wel in het geval van JForms en dergelijke, maar het is allicht bijna hetzelfde voor applets.

diem

Legacy Member
dank u voor de uitleg, dan zal ik wel eerst eens proberen met een applicatie , het lijkt me moeilijk om daar rond te werken dat hij steeds paint refresht

schop aars

Legacy Member
ge kunt ook me threads werken en dan de thread effkes doen slapen zodat em trager alles gaat optellen.

thread.sleep() enzo
zoek maar is op

.Acku.

Legacy Member
Het zit gewoon helemaal fout. Waarom roep je repaint() op in de paint methode? Als je een lus wilt dan moet dat via een Thread of TimerTask. Nu doe je niet veel anders dan:

void iets() {
a++;
iets();
}

letterlijk alle CPU consumerend

QplQyer

Legacy Member
diem zei:
dank u voor de uitleg, dan zal ik wel eerst eens proberen met een applicatie , het lijkt me moeilijk om daar rond te werken dat hij steeds paint refresht
Euh het is helemaal niet moeilijk, delete gewoon die lijn met repaint () in je paint () methode en het probleem is opgelost ;)

diem

Legacy Member
je hebt volledig gelijk :)

en het ding is dat ik eigelijk nog tamelijk goed met java kan werken, en dan maak ik zo een stomme fouten :s maar het was wel al even geleden hoor :)
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