[Java] java.lang.NullPointerException

Pagina: 1
Acties:

  • knackje
  • Registratie: Oktober 2003
  • Laatst online: 24-04 14:38
Ik ben bezig met het leren van java. En kreeg bij de bouw van mijn film database de volgende foutmelding: java.lang.NullPointerException

java.lang.NullPointerException

at Film_applicatie.Beheer.getFilmsLijst(Beheer.java:29)
at Film_applicatie.Scherm.toonFilmsLijst(Scherm.java:369)
at Film_applicatie.Scherm.<init>(Scherm.java:19)
at Film_applicatie.Beheer.<init>(Beheer.java:12)
at Film_applicatie.Beheer.main(Beheer.java:17)


Wanneer ik alle classe los van elkaar compileer worden ze allemaal gewoon gecompileerd alleen wanneer ik het programma start door middel van de main komt bovenstaande foutmelding.

Heb al gezocht op het forum en al een aantal zelfde vragen gevonden alleen ik snap niet echt wat er bedoeld wordt.

Ik hoop dat iemand mij kan vertellen, wat ik met deze foutmelding aan moet


bedankt

knackje

[ Voor 10% gewijzigd door knackje op 31-03-2004 19:20 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Stel ik heb het volgende:

String s = null;

en ik zeg:

boolean equals = s.equals("bladiabla");

Dan krijg ik een NullPointerException. Waarom? s is null, en je probeert een methode aan te roepen op een niet bestaand object. Verder kun je in die stacktrace precies zien waar de fout zich heeft voorgedaan door naar de 1e regel van die NullPointerExcepton te kijken:

at Film_applicatie.Beheer.getFilmsLijst(Beheer.java:29)

Kijk eens op die regel, en controleer of al die objecten wel een waarde hebben.

[edit]
En verder is dit ook geen fout die door de java compiler afgevangen kan worden hoor. Tenslotte weet de compiler niet of daar runtime een null komt te staan. Het heeft dus niets met compilen te maken.

[ Voor 20% gewijzigd door Alarmnummer op 31-03-2004 18:37 ]


  • knackje
  • Registratie: Oktober 2003
  • Laatst online: 24-04 14:38
bedankt voor je reactie.

Goede tip van je om te kijken naar de eerste regel. Weet ik te minste wat de fout veroorzaakt. Ik weet alleen nog niet waarom. Dit is het stukje code die de fout veroorzaakt:

Zie jij misschien wat er fout gaat?

code:
1
2
3
public ArrayList getFilmsLijst(){
        return deDatabase.geefFilmLijst(); 
        //return deFilmsLijst;



regel 29 is deze: return deDatabase.geefFilmLijst();

hieronder is het stukje code die er mee te maken heeft. Deze code staat de de class database

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
public ArrayList geefFilmLijst() {
        ArrayList gevondenFilms = new ArrayList();
        
        PreparedStatement pstmt;
        ResultSet resultaat;
        
        try {
            pstmt = deDatabaseConnectie.prepareStatement("SELECT * FROM Film ORDER BY titel");
            resultaat = pstmt.executeQuery();
            while (resultaat.next()) {
                Film eenFilm = new Film();
                eenFilm.settitel_nr(resultaat.getString("titel_nr"));
                eenFilm.settitel(resultaat.getString("titel"));
                eenFilm.setregiseur(resultaat.getString("regiseur"));
                eenFilm.setacteur(resultaat.getString("acteur"));
                
                
                gevondenFilms.add(eenFilm);
            }
            pstmt.close();
        }
        catch (SQLException eSql) {
            System.out.println( "Filmlijst zoeken: "  + eSql.toString());
        }

[ Voor 21% gewijzigd door knackje op 31-03-2004 18:58 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Kan je er even [ code ] [ /code ] tags omheen plaatsen (zonder spaties) en aangeven waar regel 29 zit?

[ Voor 10% gewijzigd door Alarmnummer op 31-03-2004 18:54 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Mijn eerste gok zou zijn dat deDatabase null is... maar goed, wie ben ik?

  • knackje
  • Registratie: Oktober 2003
  • Laatst online: 24-04 14:38
Ik heb nergens aan gegeven dat dedatabase = null

Zie dit :
code:
1
2
3
4
public Beheer() {
        //HoofdScherm openen
        new Scherm(this).show();
        deDatabase = new Database();

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

knackje schreef op 31 maart 2004 @ 19:01:
Ik heb nergens aan gegeven dat dedatabase = null

Zie dit :
code:
1
2
3
4
public Beheer() {
        //HoofdScherm openen
        new Scherm(this).show();
        deDatabase = new Database();
Kan het zijn getFilmsLijst() eerder wordt aangeroepen dan deDatabase = new Database()?

(System.out kan wel inzicht verschaffen)

  • knackje
  • Registratie: Oktober 2003
  • Laatst online: 24-04 14:38
nee deze wordt pas na de database geladen. Zie het volgende stukje 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
package Film_applicatie;
import java.util.*;


public class Beheer {
  private Database deDatabase;  
  
     /** Creates a new instance of Beheer */
    public Beheer() {
        //HoofdScherm openen
        new Scherm(this).show();
        deDatabase = new Database();
    }
    
     public static void main(String[] args) {
        Beheer beheer1 = new Beheer();
        }
     
     
     
      //Film beheer methods
    public Film zoekFilm(String eenTitel_nr){
        return deDatabase.geefFilm(eenTitel_nr);
      
    }
    
    public ArrayList getFilmsLijst(){
        return deDatabase.geefFilmLijst();
        //return deFilmsLijst;
    }

[ Voor 16% gewijzigd door knackje op 31-03-2004 19:19 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je doet eerst een show van het scherm (waar ongetwijfeld een variabele van type beheer dmv this wordt geinitialiseerd) en die roept vervolgens de get methode aan.
Dit gebeurt voor de aanroep van deDatabase = new Database()...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Idd, loop het programma maar eens na en dan zal je zien dat je een getFilmList doet voordat de Database aangemaakt is. Je hebt nu echt genoeg info om het probleem op te lossen.

  • knackje
  • Registratie: Oktober 2003
  • Laatst online: 24-04 14:38
Ja ik heb nu eerst de database laten laden en vervolgens het scherm opgeroepen. Hij start nu goed op. Bedankt voor de tips

knackje
Pagina: 1