Toon posts:

[Java] Kan geen Graphics ophalen in externe thread

Pagina: 1
Acties:

Verwijderd

Topicstarter
Haj,

Ik ben nogal een beginner met Java, doe het nog maar 3 maanden oid.
Laatst had ik dus een probleem met een nullpointer in mijn projectje.
Projectje bestaat uit een applicatie, die een externe klasse thread aanroept.
De thread tekent vervolgens iets op het scherm.

Nou is het probleem dus, dat ik niet bijvoorbeeld in mijn Thread kan neerzetten;
(in het 'run' gedeelte)

"g.fillRect(10,10,50,50);"

Omdat ie uiteraard eerst moet weten wat g precies is.

Ik dacht eerst dus, ok fijn,
dan maak ik een methode die om de Graphics vraagt en dan lukt het allemaal wel:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Test extends Thread {
   ...

   public void run() {
      //leeggelaten
   }

   public void teken(Graphics g) {
      g.fillRect(10,10,50,50);
   }
   
   ...
}


Ik helemaal blij dat het eindelijk werkt, want mijn animatie werkte eindelijk. (fillRect is overigens een voorbeeld waarbij g gebruikt wordt. In werkelijkheid gebruik ik plaatjes in for-loops etc.) . maar later blijkt dus dat deze methodes niet werken omdat ze niet binnen de public void run() staan van de Thread. Ik kwam er namelijk achter dat bijvoorbeeld het scherm waarin mijn applicatie draaide pas sloot als de animatie klaar was. :|

Nu is het dus kennelijk de bedoeling dat alle dingen die als Thread draaien in het run gedeelte komen, maar het probleem is echter dat ik deze run methode niet mag aanpassen omdat het dan niet de werkelijke thread is maar slechts een andere methode buiten de werkelijke thread.

Wat ik bedoel:

code:
1
public void run(Graphics g) {}


Werkt niet, omdat ie dan niet de originele run methode override, maar het gewoon als andere methode ziet. Of maak ik hier een denkfout? Hoe kan ik zorgen dat ik wel via parameters Graphics g kan doorgeven én dat ik in de werkelijke thread zit?

Ik vind het erg lastig om het probleem goed te omschrijven omdat ik zelf een beetje in de war ben, maar ik hoop dat het een beetje te begrijpen is. Heb wel een beetje proberen te searchen maar op iets duidelijks kom ik niet uit.

Wel kwam ik een code tegen als in
code:
1
Graphics g=this.getGraphics()


Ik dacht dus dat ik dan in mijn Thread naar de hoofdapplicatie (stel hoofdapplicatie is Postbode) kon verwijzen. Dus:

code:
1
Graphics g=Postbode.getGraphics()


maar dan gaat de compiler klagen over static context.

Snap het allemaal niet echt meer, help ;(

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 24-05 20:08
Hmm, static context? Misschien dat je een methode static gemaakt hebt en de variabele die hij wil gebruiken niet o.i.d.

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 27-05 10:14

Eelke Spaak

- Vlad -

Je moet een Graphics object meegeven aan de constructor van je Thread class.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class GrafischeKlasse extends Applet // of zoiets
{
   // ...
   Test t = new Test(getGraphics());
   t.start();
   // ...
}

class Test extends Thread
{
   private Graphics g;

   public Test(Graphics g)
   {
      this.g = g;
   }

   public void run()
   {
      // Hier kan je nu gewoon op g gaan tekenen, bv. g.drawRect() of zo;
   }
}

TheStreme - Share anything with anyone


Verwijderd

Topicstarter
Vladimir G. schreef op 13 december 2003 @ 22:33:
Je moet een Graphics object meegeven aan de constructor van je Thread class.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class GrafischeKlasse extends Applet // of zoiets
{
   // ...
   Test t = new Test(getGraphics());
   t.start();
   // ...
}

class Test extends Thread
{
   private Graphics g;

   public Test(Graphics g)
   {
      this.g = g;
   }

   public void run()
   {
      // Hier kan je nu gewoon op g gaan tekenen, bv. g.drawRect() of zo;
   }
}
Bedankt voor de suggestie,
ik neem aan dat applet / applicatie verder niet echt zoveel gaat uitmaken?
Ik werk namelijk in een applicatie.

Zal het morgen even proberen, het is nu te laat om eraan te beginnen :)

-edit

Heb het toch ff getest, of het basisprincipe werkt
en godver, wat ben ik je dankbaar zeg _/-\o_

Zo een simpel antwoord, en wij (2 n00b studentjes met mij) zaten gewoon 3 dagen vast op dit probleem. (achterhalen, en dan vervolgens allemaal verschillende dingen proberen :P)

}:O

Dank u ;)

[ Voor 17% gewijzigd door Verwijderd op 13-12-2003 23:34 ]