Toon posts:

[java] java.lang.NullPointerException (??)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben een beetje aan het oefenen met Java.
Wat ik probeer te maken is een Canvas met knoppen die de positie van een blokje aansturen.

De knoppen zijn geplaatst, Foutloos en wel.
Het blokje ook, en ook deze foutloos.

Zelfs de actionlistener heb ik erin geplaatst zonder fouten.

Echter zodra ik een klasse aanmaak die de variabel aanpast en een opdracht geeft tot repaint krijg ik de volgende error tijdens het 'uitvoeren' van de applet. :
init:
deps-jar:
compile-single:
run-applet:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at Navigatie$omlaagKnopHandler.actionPerformed(beweegobject.java:72)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Ik heb al op google gezocht en daar werd me verteld dat ik een niet bestaand object probeerde aan te spreken. Maar ik definieer dit object toch bij voorbaat?

Hieronder mijn code.

code:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.awt.*;

public class beweegobject extends Applet {
    private Navigatie navigatie;
    private Blokje blokje;
    
    public void init() {
        setLayout( new BorderLayout() );
        
        blokje = new Blokje();
        add(blokje, BorderLayout.CENTER );
        
        navigatie = new Navigatie();
        add( navigatie, BorderLayout.SOUTH );
    }  
}

class Blokje extends Canvas {
    private int hor = 10,
                ver = 10;
    
    public void omhoog(){
        ver = ver - 10;
        repaint();
    }
    
    public void omlaag(){
        ver = ver + 10;
        repaint();
    }
    
    public void paint( Graphics g ){
        int midden = getBounds().width / 2;
        g.setColor( Color.red );
        g.fillRect( 20, ver, 10, 10 );
    }
}

class Navigatie extends Panel{
    private Button omhoogKnop, omlaagKnop, naarlinksKnop, naarrechtsKnop;
    private Blokje blokje;
    
    public Navigatie( ) {
    //public Navigatie( Blokje s ) {
    //    this.blokje = s;
        omhoogKnop = new Button( "omhoog" );
        omlaagKnop = new Button( "omlaag" );
        naarlinksKnop = new Button( "naar links" );
        naarrechtsKnop = new Button( "naar rechts" );
        
        omhoogKnop.addActionListener( new omhoogKnopHandler() );
        omlaagKnop.addActionListener( new omlaagKnopHandler() );
        
        add( omhoogKnop );
        add( omlaagKnop );
        add( naarlinksKnop );
        add( naarrechtsKnop );
    }
    
    class omhoogKnopHandler implements ActionListener{
        public void actionPerformed( ActionEvent e ){
           blokje.omhoog(); 
           blokje.repaint();
        }
    }
    
    class omlaagKnopHandler implements ActionListener{
        public void actionPerformed( ActionEvent e ){
           blokje.omlaag(); 
           blokje.repaint();
        }
    }
}


Ziet iemand misschien de fout die ik gemaakt heb?

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 19:03
Even debuggen op regel 72 en je weet het. Er is overigens een verschil tussen definieren en instantieren.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 19:27

momania

iPhone 30! Bam!

at Navigatie$omlaagKnopHandler.actionPerformed(beweegobject.java:72)
Regelnummer staat erbij ;)

Java:
72
blokje.omlaag(); 

blokje is dus null, omdat je de volgende constructor niet meer gebruikt:
Java:
47
48
49
public Navigatie( Blokje s ) {
    this.blokje = s;
}

Neem je whisky mee, is het te weinig... *zucht*


  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 14:05
Je hebt wel een variable blokje in je navigatie class maar die blijft null omdat je deze niet instantieert of set :)

Last.fm
Films!


Verwijderd

Topicstarter
momania schreef op maandag 04 december 2006 @ 14:46:
[...]

Regelnummer staat erbij ;)

Java:
72
blokje.omlaag(); 

blokje is dus null, omdat je de volgende constructor niet meer gebruikt:
Java:
47
48
49
public Navigatie( Blokje s ) {
    this.blokje = s;
}
Klopt idd, maar vervolgens krijg ik de melding dat er een fout zit bij
init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\Alex\Java\JavaLibrary4\build\classes
C:\Documents and Settings\Alex\Java\JavaLibrary4\src\beweegobject.java:16: cannot find symbol
symbol : constructor Navigatie()
location: class Navigatie
navigatie = new Navigatie();
1 error
BUILD FAILED (total time: 0 seconds)
Help!! :D ik zie het nu echt niet meer.
Nee geen geval van luiheid. Ik ben al de hele morgen aan het puzzelen geweest voordat ik uiteindelijk jullie maar ben gaan lastigvallen. :'(

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 19:03
beschouw een constructor eens als een functie

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 14:05
Verwijderd schreef op maandag 04 december 2006 @ 14:51:
[...]


Klopt idd, maar vervolgens krijg ik de melding dat er een fout zit bij


[...]


Help!! :D ik zie het nu echt niet meer.
Nee geen geval van luiheid. Ik ben al de hele morgen aan het puzzelen geweest voordat ik uiteindelijk jullie maar ben gaan lastigvallen. :'(
Op regel 16 van de code van je eerste post doe je:
Java:
1
navigatie = new Navigatie();


Terwijl die constructor niet meer bestaat, je moet blokje meegeven :)

Last.fm
Films!


  • momania
  • Registratie: Mei 2000
  • Laatst online: 19:27

momania

iPhone 30! Bam!

Verwijderd schreef op maandag 04 december 2006 @ 14:51:
[...]

Help!! :D ik zie het nu echt niet meer.
Nee geen geval van luiheid. Ik ben al de hele morgen aan het puzzelen geweest voordat ik uiteindelijk jullie maar ben gaan lastigvallen. :'(
Je leest de meldingen niet die je krijgt... dus je bent niet lui, maar je let gewoon niet op ;)
C:\Documents and Settings\Alex\Java\JavaLibrary4\src\beweegobject.java:16: cannot find symbol
symbol : constructor Navigatie()
Staat netjes dat op regel 16 je een constructor probeert aan te roepen die niet bestaat. Hoe moeilijk kan het zijn ;)




Dus LEZEN!

Neem je whisky mee, is het te weinig... *zucht*


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

Roep je in Init dan wel de juiste constructor aan?

Java:
1
2
3
4
        blokje = new Blokje();
        add(blokje, BorderLayout.CENTER );
        
        navigatie = new Navigatie(blokje);

Gezien de code heb je in de class wel de constructor vervangen, maar de aanroep naar de oude parameterloze versie gelaten.

edit:

:w momania, Sv3n :)

[ Voor 5% gewijzigd door PhysicsRules op 04-12-2006 14:58 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:25

Creepy

Tactical Espionage Splatterer

momania schreef op maandag 04 december 2006 @ 14:55:
[...]

Je leest de meldingen niet die je krijgt... dus je bent niet lui, maar je let gewoon niet op ;)

Dus LEZEN!
Dat wil ik even onderstrepen :)

Plus dat we hier verlangen van je dat je ook aangeeft welke zaken je nu zelf hebt geprobeerd. Als je dus een nieuwe foutmelding krijgt geef dan ook aan wat je zelf nu hebt gedaan om het proberen op te lossen. Nu lijk je namelijk wel degelijk lui :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Goedemorgen,

YAY IDD dat was het!!! :D

code:
1
2
        navigatie = new Navigatie( blokje );
        add( navigatie, BorderLayout.SOUTH );


Heeft weinig te maken met niet goed lezen. Ikzelf ben vrij nieuw met Java.
Dus ik zie dit soort dingen niet zo heel erg snel.

En weet ook nog niet alle benamingen.

Heel erg bedankt!!!!!!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 15-10 19:25

Swaptor

Java Apprentice

Het leren lezen van de fouten die de (behulpzame) IDE geeft is mijns inziens bijna even belangrijk als de taal syntactisch correct onder de knie krijgen.
Zonder te weten wat er fout gaat zul je nooit de oplossing kunnen vinden, daarom raad ik je aan een goed boek aan te schaffen om (jezelf) Java te leren. Ik ben in de geprivilegieerde positie dat ik tijdens mijn opleiding de taal heb geleerd, maar veel is gewoon hard werken geweest, en onbegrijpelijke foutmeldingen begrijpelijk maken.

In ieder geval succes, maar houd bovenstaande goed in het achterhoofd voordat je wanhopig gaat googlen/posten/rondrennen. Eerst snappen wat er fout gaat is dus het devies.

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude

Pagina: 1