Toon posts:

[JAVA] Vage Nullpointer

Pagina: 1
Acties:
  • 44 views sinds 30-01-2008

Verwijderd

Topicstarter
De klassen:

De 'main'
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
import java.lang.Object;
import java.applet.Applet;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*; // Gedoetje importeren.

public class Applet1 extends Applet {

 GUI pdz1;
 Login login1;


 public void init(){

 pdz1 = new GUI();

 }
 public boolean action( Event e, Object o )
  {
   login1.loginActie(e,o);
   return true;
  }

}

De klasse GUI
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
De GUI klasse
Hiphop hurrah!
Its like a virus...
*/
import java.lang.Object;
import java.awt.TextField;
import java.awt.Button;
import java.awt.Event;
import java.awt.Label;
import java.applet.Applet;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class GUI extends Applet1 {



  //Login login1;
  RapportOverzicht overzicht1;
 public Button butLogin;
  public String strNaam, strWachtwoord;
  TextField tfNaam, tfWachtwoord;
  String strBericht;
  Font fntLettertype;
  int intTeller;


  public GUI() {

  butLogin = new Button( "Login"  );
    add(butLogin);
  }


  public void init()

  {
    fntLettertype = new Font( "Courier", Font.PLAIN, 12);
    //butLogin = new Button( "Login"  );
    //add(butLogin);

    tfNaam = new TextField( 10 );
    tfWachtwoord = new TextField ( 10 );
    tfWachtwoord.setEchoChar('*');
    add(tfNaam);
    add(tfWachtwoord);
    strBericht = "";
    intTeller = 1;
    schermen();
  }


  public void veranderBericht(String strBericht){
  this.strBericht = strBericht;
  }

  public void paint(Graphics g) {

  g.setFont( fntLettertype );
  g.drawString(strBericht, 10, 100);
  }

  public void tellerOmhoog() {

  intTeller++;
  schermen();
  }

  public void loginActie2( Event e, Object o )
  {
   login1.loginActie(e,o);
  }

  public void schermen()
  {
  switch (intTeller) { // TellerSwitchgedoe
    case 1: strNaam = tfNaam.getText();
          strWachtwoord = tfWachtwoord.getText();

          login1 = new Login();
          //login1.loginActie();
          strBericht = "Voer Uw gebruikersinformatie in";
          break;

    case 2: tfNaam.setVisible(false);
          tfWachtwoord.setVisible(false);
          butLogin.setVisible(false);
          strBericht = " Welkom " + strNaam + " U bent ingelogt!";
          repaint();
          login1.verbinding.closeConnection();
          overzicht1 = new RapportOverzicht();

          break;
    case 3: System.out.println("HOLLLAAAAAAAA CASE3");

          //intTeller = 0;
          break;
          }
  }



  }

En als laatst, de klasse Login
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
import java.lang.Object;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*;


public class Login extends Applet1{


DatabaseConnectie verbinding;
  ResultSet resultaat;
  String temp;



  public Login() {
  }

 public void loginActie( Event e, Object o  )
    {

    if(e.target == pdz1.butLogin )
    {
    verbinding = new DatabaseConnectie();
    verbinding.openConnection();
    resultaat = verbinding.getInformation( "SELECT * FROM Vestiging " +
    "WHERE Inlognaam LIKE " + "'" + pdz1.strNaam + "'");
    try {
        while (resultaat.next()) {
        temp = resultaat.getString("Wachtwoord");
        System.out.println("De data is successvol ontvangen");
      }
    } catch ( Exception exception ) {
    System.out.println("Er is iets mis gegaan !");
    }

    if(pdz1.strWachtwoord.equals(temp))
      {pdz1.tellerOmhoog();
      pdz1.schermen();}
    else
      pdz1.veranderBericht("Holla, foutje he sukkel");
    }

  }


  }

Het probleem zit em in if(e.target == pdz1.butLogin ).

Hij geeft een nullpointer terwijl die button wel degelijk bestaat.

Iemand enig idee hoe ik dit kan oplossen ?
Alvast bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:01
Aaargh.

Heb je wel eens gedebugged?
Ik denk dat jij gewoon verwacht dat wij alle code even gaan copy pasten en het dan ff snel voor jou gaan oplossen.

https://fgheysels.github.io/


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 07:19
Die button zal vast wel bestaan, maar de referentie pdz1 (wat dat ook zou mogen wezen) zal vast wel null zijn.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
PDZ = Project de Zwart neem ik aan? Kijk aan een HvA eerstejaars :) Het is btw ook te zien aan de codingstyle die is aangeleerd. Ik ga daar nu wat kritiek op geven :) Ik hoop dat je daar tegen kan, anders moet je je maar op school aanvallen :*[quote]
Op donderdag 06 juni 2002 11:28 schreef HovaCarlito het volgende:
De klassen:

De 'main'
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
import java.lang.Object;
import java.applet.Applet;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*; // Gedoetje importeren.

public class Applet1 extends Applet {

 GUI pdz1;
 Login login1;


 public void init(){

 pdz1 = new GUI();

 }
 public boolean action( Event e, Object o )
  {
   login1.loginActie(e,o);
   return true;
  }

}
1) Kijk eens naar je imports. Wat doe je daarmee? import java.lang.Object; gebeurt automatisch door de javacompiler dus het nut daarvan ontgaat me. Verder import je ook SQL classen maar die gebruik je nergens? Onnodig dus!

2) Je indenting is ook niet al te consequent. In plaats van
code:
1
2
3
4
5
public void init(){

 pdz1 = new GUI();

 }
is het mooier om pdz1 = new GUI(); te laten inspringen

3) Je gebruikt boolean action. Waarom? We leven niet meer in het stenen tijdperk hoor. Vooral omdat je toch een JRE1.3 gaat afdwingen (JDBC connecties) Gebruik liever actionListners om de boel te coordineren. Dan scheid je je model en view ook nog een stuk netter

4) DUIDELIJK NAMEN GEBRUIKEN! COMMENTAAR! Echt heel triest dat ze dat er niet inhameren op de HvA maar namen als pdz1 zuigen echt bagger. Weet je nog wat dat is na een half jaar?
De klasse GUI
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
De GUI klasse
Hiphop hurrah!
Its like a virus...
*/
import java.lang.Object;
import java.awt.TextField;
import java.awt.Button;
import java.awt.Event;
import java.awt.Label;
import java.applet.Applet;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class GUI extends Applet1 {



  //Login login1;
  RapportOverzicht overzicht1;
 public Button butLogin;
  public String strNaam, strWachtwoord;
  TextField tfNaam, tfWachtwoord;
  String strBericht;
  Font fntLettertype;
  int intTeller;


  public GUI() {

  butLogin = new Button( "Login"  );
    add(butLogin);
  }


  public void init()

  {
    fntLettertype = new Font( "Courier", Font.PLAIN, 12);
    //butLogin = new Button( "Login"  );
    //add(butLogin);

    tfNaam = new TextField( 10 );
    tfWachtwoord = new TextField ( 10 );
    tfWachtwoord.setEchoChar('*');
    add(tfNaam);
    add(tfWachtwoord);
    strBericht = "";
    intTeller = 1;
    schermen();
  }


  public void veranderBericht(String strBericht){
  this.strBericht = strBericht;
  }

  public void paint(Graphics g) {

  g.setFont( fntLettertype );
  g.drawString(strBericht, 10, 100);
  }

  public void tellerOmhoog() {

  intTeller++;
  schermen();
  }

  public void loginActie2( Event e, Object o )
  {
   login1.loginActie(e,o);
  }

  public void schermen()
  {
  switch (intTeller) { // TellerSwitchgedoe
    case 1: strNaam = tfNaam.getText();
          strWachtwoord = tfWachtwoord.getText();

          login1 = new Login();
          //login1.loginActie();
          strBericht = "Voer Uw gebruikersinformatie in";
          break;

    case 2: tfNaam.setVisible(false);
          tfWachtwoord.setVisible(false);
          butLogin.setVisible(false);
          strBericht = " Welkom " + strNaam + " U bent ingelogt!";
          repaint();
          login1.verbinding.closeConnection();
          overzicht1 = new RapportOverzicht();

          break;
    case 3: System.out.println("HOLLLAAAAAAAA CASE3");

          //intTeller = 0;
          break;
          }
  }



  }
1) Let op je imports. Nu gebruik je 4 regels, terwijl die ook met import java.awt.*; Sterker nog, die gebruik je ook :? Wat is het nu dan van java.awt.TextField

2) Waarom in godsnaam eigenlijk nog AWT? Het is niet echt fout om voor AWT te kiezen, maar vooral omdat je toch < 1.3 gaat ondersteunen, zou ik kiezen voor Swing. Sun hamert hier ook heel erg op.

3) Waarom extends Applet? Dat is echt gebruik maken van overerving op een hele! rare! manier! Die classe heeft helemaal geen band met de Applet, het is geen speciale applet oid. Deze keuze heb je volgens mij ook alleen gedaan om het als component te kunnen gebruiken. Kijk dan eens naar de classe Panel.

4) Een init() en een constructor. En ze doen beide ongeveer hetzelfde bij jouw. Welk bestaansrecht heeft de ene dan tov de andere?

5) Neem een default op in je switch. Nu gaat het fout als een waarde groter dan 3 op de proppen komt. In zo'n switch zou ik trouwens ook de waarde 3 een naam geven bijv
code:
1
static private int CLOSE_CONNECTION = 3;

Dan kan je in je switch case CLOSE_CONNECTION: gebruiken :) wat veel duidelijker is
En als laatst, de klasse Login
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
import java.lang.Object;
import java.sql.ResultSet;
import java.applet.*;
import java.awt.*;


public class Login extends Applet1{


DatabaseConnectie verbinding;
  ResultSet resultaat;
  String temp;



  public Login() {
  }

 public void loginActie( Event e, Object o  )
    {

    if(e.target == pdz1.butLogin )
    {
    verbinding = new DatabaseConnectie();
    verbinding.openConnection();
    resultaat = verbinding.getInformation( "SELECT * FROM Vestiging " +
    "WHERE Inlognaam LIKE " + "'" + pdz1.strNaam + "'");
    try {
        while (resultaat.next()) {
        temp = resultaat.getString("Wachtwoord");
        System.out.println("De data is successvol ontvangen");
      }
    } catch ( Exception exception ) {
    System.out.println("Er is iets mis gegaan !");
    }

    if(pdz1.strWachtwoord.equals(temp))
      {pdz1.tellerOmhoog();
      pdz1.schermen();}
    else
      pdz1.veranderBericht("Holla, foutje he sukkel");
    }

  }


  }
1) Zie de vorige classes, waarom extends applet?

2) Waarom een lege constructor?

3) Hoe weet deze classe wat pdz1 is, waar pdz1 staat en hoe die te bereiken. Je hebt hier toch geen verwijzing in deze classe naar het pdz1 object?
Het probleem zit em in if(e.target == pdz1.butLogin ).

Hij geeft een nullpointer terwijl die button wel degelijk bestaat.

Iemand enig idee hoe ik dit kan oplossen ?
Alvast bedankt.
Nog veel werk te doen dan in die twee weken die je nog hebt. Ik heb hier de fouten opgeschreven die ik even snel zag, er zit nog meer in, maar ik wordt gestalkt door 4 mods dat ik moet opschieten :+

Werk eraan! Ga naar Marten Teitsma of Jan Derriks toe en vraag om hulp hiermee, want zo gaat niet goedkomen bij de code audit vermoed ik!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Pdz1 bestaat niet vanwege deze nogal exotische opzet:
code:
1
2
3
4
5
6
7
8
Applet1 extends Applet

  public void init(){
    pdz1 = new GUI();
  }
}

public class GUI extends Applet1

Je maakt een GUI instantie aan, waarvan de pdz1 nooit geintialiseerd zal worden. pdz1 heeft namelijk alleen een waarde in de instantie van Applet1, waarvan de methode init wel wordt aangeroepen.

Ik raad je aan om iets bewuster met inheritance om te gaan of eerst eens na te kijken hoe je inheritance eigenlijk moet toepassen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Yep, al gedaan.
Maar misschien ziet iemand meteen de fout ofzo.

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op donderdag 06 juni 2002 11:37 schreef HovaCarlito het volgende:
Yep, al gedaan.
Maar misschien ziet iemand meteen de fout ofzo.
[stoom afblazen]
Ja, die zit namelijk ergens in je code...
[/stoom afblazen]

Als je debugged dan is het niet ongebruikelijk om een variabele die een andere waarde heeft dan je verwacht eens goed te volgen. Wat voor debugger gebruik je? De meeste ondersteunen het zetten van breakpoints op punten in de code die je interesseren en het volgen van de waarde van variabelen.

Maar ik denk dat mbravenboer je al op het goede spoor heeft gezet.

With the light in our eyes, it's hard to see.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik denk trouwens dat je nog geen log-statement hebt gezet om te kijken welke waarde nu eigenlijk null is en of dat ook echt zo is.

Dat is toch echt het eerste wat je moet doen in zo'n situatie. Je had dan ontdekt dat de waarde inderdaad null is. Daarna had je je af kunnen vragen hoe dat nu mogelijk is. Je was dan waarschijnlijk op dezelfde conclusie gekomen als hetgene wat ik je zojuist op een presenteerblaadje aan heb gereikt ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik laat m nog even open om Glimi een kans te geven zijn tekst te posten (hoewel het natuurlijk ook wel lache zou zijn als ie het voor niks deed :+ ;)), maar het is natuurlijk onzin om je code te posten en vervolgens aan ons te vragen of we het maar even op willen lossen... zo werkt het hier niet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:01
Ik zit ook te wachten op Glimi.

Als iedereen hier z'n null-pointer exceptions zou posten en dan vragen om het ff snel op te lossen, terwijl er zelf de moeite niet wordt genomen om deftig te zoeken naar het probleem...

https://fgheysels.github.io/


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

ahhZo .. glimi heeft z'n post aangepast, deze kan op slot :)

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

Pagina: 1

Dit topic is gesloten.