Archief - [java] null exception

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Qualistor

Legacy Member
ellow,
heb net een applet gemaakt, en die werd gecompiled zonder problemen, alleen zit ik met een vervelende null exception fout als ik op de knop druk
waaraan zou dit kunnen liggen?
ik denk dat ik geen grote fouten heb gemaakt??


Code:
// De Klasse Persoon 

class Persoon  
{ 
    private int AANTAL = 30;
    protected String[] naamRij, voornaamRij, straatRij, postnummerRij, gemeenteRij;

    
    public void init() {
    naamRij = new String[ AANTAL ];
    voornaamRij = new String[ AANTAL ];
    straatRij = new String[ AANTAL ];
    postnummerRij = new String[ AANTAL ];
    gemeenteRij = new String[ AANTAL ];
    	
}

}

// De Klasse Student
class Student extends Persoon
{ 

 private int AANTAL = 30;
    private String[] klasRij, resultaatRij;  
    
    public void init() {
    klasRij = new String[ AANTAL ];
    resultaatRij = new String[ AANTAL ];
    	
}
    public void invoer_gegevens(String Snaam, String Svoornaam, String Sstraat, String Spostnummer, String Sgemeente, 
    String Sklas, String Sresultaat) {
    
      
    for( int nr = 0; nr < AANTAL; nr++ )
{
        	  
        naamRij[ nr ] = Snaam;
        voornaamRij[ nr ] = Svoornaam;
        straatRij[ nr ] = Sstraat;
        postnummerRij[ nr ] = Spostnummer;
        gemeenteRij[ nr ] = Sgemeente;
        klasRij[ nr ] = Sklas;
        resultaatRij[ nr ] = Sresultaat;
         
    }
 }    
    
    
}

en m'n knophandler

Code:
class toevoegHandler implements ActionListener 
{ 
   public void actionPerformed (ActionEvent e) 
   { 
      String deNaam, deVoornaam, dePostnummer, deGemeente, deStraat, deKlas, deResultaat; 

      deNaam= naamVak.getText(); 
      deVoornaam= voornaamVak.getText(); 
      dePostnummer= postnummerVak.getText(); 
      deStraat = straatnrVak.getText();
      deGemeente= gemeenteVak.getText();
      deKlas = klasVak.getText();
      deResultaat = resultaatVak.getText();
          
      Student Studentenlijst = new Student();
      Studentenlijst.invoer_gegevens( deNaam, deVoornaam, deStraat, dePostnummer, deGemeente, deKlas, deResultaat );
      
      naamVak.setText ( "" );
      voornaamVak.setText ( "" );
      klasVak.setText( "" );
      straatnrVak.setText( "" );
      postnummerVak.setText( "" );
      gemeenteVak.setText( "" );
      resultaatVak.setText( "" );
      statusnieuweVak.setText( " Nieuwe Student Toegevoegd " );
           
   } 
}

alvast bedankt :pray:

DarkBone

Legacy Member
Bij het invoeren ga je telkens de volledige Array opvullen met de gegevens van die ene persoon??
Een for-lus is daar toch compleet overbodig? Je dient enkel bij te houden tot op welke index de array reeds werd opgevuld, en bij het toevoegen vul je op de index daarna de nieuwe gegevens in...

Ik vind je manier van werken trouwens erg vaag, waarom hou je geen array van persoons- en/of studentenobjecten bij, in plaats van zoals nu in je klasses arrays bij te houden?

Een klasse dient een abstractie te zijn van een bepaald gegeven, als je die klasse Student noemt, dan verwacht ik niet dat daar 30 studenten in zitten...

Qualistor

Legacy Member
DarkBone zei:
Bij het invoeren ga je telkens de volledige Array opvullen met de gegevens van die ene persoon??
Een for-lus is daar toch compleet overbodig? Je dient enkel bij te houden tot op welke index de array reeds werd opgevuld, en bij het toevoegen vul je op de index daarna de nieuwe gegevens in...

Ik vind je manier van werken trouwens erg vaag, waarom hou je geen array van persoons- en/of studentenobjecten bij, in plaats van zoals nu in je klasses arrays bij te houden?

Een klasse dient een abstractie te zijn van een bepaald gegeven, als je die klasse Student noemt, dan verwacht ik niet dat daar 30 studenten in zitten...

bedoeling is dat er gebruik gemaakt wordt van overerven .. dus student erft over van persoon..
ivm die for-lus .. hoe zou jij het dan doen?
er moet namelijk iedere keer als er op de knop geklikt worden een reeks met gegevens bijkomen .. hoe zeg je dan bv dat deze student 1 is , en de volgende 2 etc?

alvast vriendelijk bedankt

DarkBone

Legacy Member
Qualistor zei:
bedoeling is dat er gebruik gemaakt wordt van overerven .. dus student erft over van persoon..
ivm die for-lus .. hoe zou jij het dan doen?
er moet namelijk iedere keer als er op de knop geklikt worden een reeks met gegevens bijkomen .. hoe zeg je dan bv dat deze student 1 is , en de volgende 2 etc?

alvast vriendelijk bedankt
Dat overerven blijft net hetzelfde hoor...

Goed, ik probeer het kort en duidelijk uit te leggen:

Je hebt twee klasses, met elk hun datamembers:

Persoon
- naam (string)
- voornaam (string)
- straat (string)
- postnummer (int)
- gemeente (string)

Student (extends Persoon)
- klas (string)
- resultaat (int)

Nu maak je nog een 'Driver' klasse aan die deze objecten gaat aanmaken en beheren in een Array (object).

Je zult uiteindelijk dus een Array van Student-objecten bijhouden!!

Je werkwijze zal er als volgt uit zien
- Array aanmaken van bepaalde grootte (30)
- je start met teller op 0
- bij het op de knop klikken maak je een Student object aan en voeg je die toe aan de array op index gelijk aan teller-1, tenminste als de teller nog niet gelijk is aan de grootte van je Array (30), anders geef je foutmelding ofzo
- verhoog je tellertje

etc...

*Edit*
Die driver klasse waarover ik sprak komt mogelijks overeen met die waar je je grafische interface in aanmaakt en waar je actionlistener aan gebonden is.

Qualistor

Legacy Member
ok dit alles is gelukt hoor .. bedankt ;)

nu ben ik verder gegaan, en als ik op de knop " alles " tonen druk moet ik de array zien.

dus ff een boolean aangemaakt, bij klikken op true zetten.

maar dan? als ik dit doe bij graphics

Code:
if( !isTonen ) {
			g.drawString( studenten[0], 110, 110);
		}
heeft ie daar problemen mee
( zal wel aan mij liggen ;) .. ik gebruik nu als voorbeeld studenten[0], moet nog een for lus aan .. )
maar welke functie is daar goed voor om een array weer te geven?

vriendelijke groeten

Kn0t

Legacy Member
en studenten is een array van Student objecten?
De drawString() methode verwacht een String als argument, geen Student object.
Dus zal deze methode de Student proberen om te zetten naar een String, door de toString() methode op te roepen. Als je geen toString() methode voorziet in de klasse Student, dan zal de standaard methode, die overgeërft wordt van Object, gebruikt worden.

Je zal dan iets als Student@30f4a.. ofzo krijgen. naam van de klasse @ hashcode.

Je zal dus zelf een toString() methode moeten voorzien in de klasse Student.
bvb
public String toString()
{
return voornam + " " + naam;
}

//edit: het zou ook kunnen dat je expliciet de toString methode moet oproepen. Soms wordt die methode automatisch opgeroepen, soms ook niet. Ik geloof dat het bij stringconcatenatie is dat dit automatisch gebeurt.

Dus ofwel gebruik je dan "" + studenten[0] ofwel (=beter) studenten[0].toString()

DarkBone

Legacy Member
ge kunt ook het Object die op die index zit terug casten naar Student, en daar dan een getNaam() ofzo op toepassen, da's ook een mogelijkheid

toString lijkt me echter properder.

Qualistor

Legacy Member
Kn0t zei:
en studenten is een array van Student objecten?
De drawString() methode verwacht een String als argument, geen Student object.
Dus zal deze methode de Student proberen om te zetten naar een String, door de toString() methode op te roepen. Als je geen toString() methode voorziet in de klasse Student, dan zal de standaard methode, die overgeërft wordt van Object, gebruikt worden.

Je zal dan iets als Student@30f4a.. ofzo krijgen. naam van de klasse @ hashcode.

Je zal dus zelf een toString() methode moeten voorzien in de klasse Student.
bvb
public String toString()
{
return voornam + " " + naam;
}

//edit: het zou ook kunnen dat je expliciet de toString methode moet oproepen. Soms wordt die methode automatisch opgeroepen, soms ook niet. Ik geloof dat het bij stringconcatenatie is dat dit automatisch gebeurt.

Dus ofwel gebruik je dan "" + studenten[0] ofwel (=beter) studenten[0].toString()

bedoel je dan zoiets ?
Code:
 Student student = new Student( deNaam, deVoornaam, deStraat, dePostnummer, deGemeente, deKlas, deResultaat ); 

      studenten[ index ] = student;
      studenten[ index ].toString();
      index++;
? ben nog een beginner in java :unsure:

DarkBone

Legacy Member
Zoiets ja, probeer es hé.

*Edit*

Euh, 't is wel de bedoeling dat je die studenten[ index ].toString(); oproept in je drawString method hé! Niet bij het toevoegen zoals je nu liet uitschijnen.

Qualistor

Legacy Member
DarkBone zei:
Zoiets ja, probeer es hé.

*Edit*

Euh, 't is wel de bedoeling dat je die studenten[ index ].toString(); oproept in je drawString method hé! Niet bij het toevoegen zoals je nu liet uitschijnen.

jepjep dat heb ik gedaan, was idd mijn fout .. srr daarvoor
krijg alleen terug die vervelende null exception fout als ie aan z'n drawsting komt ..

dat zoek ik wel uit ;)
grtz en bedankt

Qualistor

Legacy Member
heb de oplossing gevonden,

het met dit gewerkt:
Code:
for( int nr = 0; nr < index; nr++  ) {
			g.drawString( studenten[ nr ].toon_gegevens() ,700, yPos);
			yPos += 20;
		}

via een functie toon_gegevens() in m'n klasse ;)
en dit werkt perfect
goretjes
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan