Toon posts:

[Java] drawImage() werkt niet (NullPointer Exception)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.awt.*;
import java.applet.*;


public class Testje extends Applet {
    
    Tank speler1;
    
    public void init() {
        speler1 = new Tank();
    }

    public void paint(Graphics g) {
        speler1.teken(g);
    }
        
}

class Tank extends Applet {
    
    Image tankje;
    MediaTracker t;
    
    public void Tank() {
        try {
        t = new MediaTracker(this); 
        tankje = getImage(getCodeBase(),"tank.gif");
        t.addImage(tankje,0);
        t.waitForID(0);
        } catch (InterruptedException e) { ; }
    }
    
    public void teken(Graphics g) {
                                // Zonder drawImage werkt het prima
                                // dus de drawString werkt wel, maar
                                // de drawImage geeft een Nullpointer Exception
        //g.drawImage(tankje,100,100,this);
        g.drawString("Hello!",100,100);
    }
    
}


Zodra ik g.drawImage uncomment werkt het niet meer. Wat doe ik in vredesnaam fout? De drawString werkt wel gewoon. En als ik het hele plaatje gewoon in de hoofdclass zet werkt het prima (dus het plaatje is er wel e.d.). Ik ben al tijden bezig geweest |:(

De error die ik krijg met de drawImage uncomment;
java.lang.NullPointerException
at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:50)
at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:749)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2803)
at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2793)
at Tank.teken(Testje.java:37)
at Testje.paint(Testje.java:14)
at sun.awt.RepaintArea.paint(RepaintArea.java:177)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
at java.awt.Component.dispatchEventImpl(Component.java:3658)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
(..)
Hij compileert wel goed, maar bij het runnen dus de bovenstaande fout.

[ Voor 4% gewijzigd door Verwijderd op 08-03-2003 19:10 ]


Verwijderd

Ik zou niet weten wat er is, maar ik heb hem hier effe gerund in
Jcreator omdat ik deze een betere vermelding van fouten vind geven op eenvoudige applets. Maar ik krijg geen error hoor, en krijg gewoon Hello in beeld, dus wat is er nu precies mis?? :|

Verwijderd

Topicstarter
...uncomment de drawImage() op regel37 :) Dat is het probleem. drawString werkt prima vanuit de andere class, maar drawImage niet.

[ Voor 56% gewijzigd door Verwijderd op 08-03-2003 19:29 ]


Verwijderd

Ik gok dat het tank.gif plaatje niet gevonden kan worden ofzo... probeer het is door het hele pad op te geven voor dat plaatje. Hij zoekt namelijk niet standaard in de folder waar je java/class files staan.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-08 10:39

Janoz

Moderator Devschuur®

!litemod

Het is sowieso een beetje erg lelijk om niks met je catch te doen. Misschien treedt
er wel een interupt exception op? Nu zal jij het niet weten.

edit:

Janoz toch....

[ Voor 14% gewijzigd door whoami op 08-03-2003 20:20 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Het lijkt idd in dat plaatje te zitten..ff snel met getHeight() en getWidth() krijg ik idd '0' terug.

@Janoz: Duh! Dit is even wat snelle gecleande code om aan jullie te tonen...

/EDIT: Ik heb het alsvolgt kunnen oplossen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.awt.*;
import java.applet.*;




public class Testje extends Applet {
        
    Tank speler1;
    
    public void init() {
        speler1 = new Tank();
        speler1.loadImages();
    }

    public void paint(Graphics g) {
        speler1.teken(g);
    }
        
}

class Tank extends Applet {
    
    
    Image tankje;
    MediaTracker t;
    
    public void Tank() {
    
    }   
    
    public void loadImages() {
        
        try {
            t = new MediaTracker(this); 
            tankje = Toolkit.getDefaultToolkit().getImage("tankje.gif");
            t.addImage(tankje,0);
            t.waitForID(0);
        } catch (InterruptedException e) { ; }
        
    }
    
    public void teken(Graphics g) {
        g.drawImage(tankje,100,100,this);
    }
    
}


Ipv getImage(getCodeBase(), "tankje.gif") nu gebruikt Toolkit.getDefaultToolkit().getImage (wzz dat eigenlijk die Toolkit.getDefaulToolkit?). MAAR daarna kreeg ik weer een andere error. Kennelijk mocht er niet een bepaald statement in init() van z'n class staan...Daarom heb ik dat hele inladen nu in een eigen method gezet, en nu werkt het eindelijk, woei :D Java rules _/-\o_ Hop, volgende stap de doublebuffering en KeyListener implenteren :)

Thanks DGR!

[ Voor 90% gewijzigd door Verwijderd op 08-03-2003 21:24 ]

Pagina: 1