null pointer exception - woran liegts?

Status
Nicht offen für weitere Antworten.

Dilandau

Aktives Mitglied
In der java console beim austesten in html, wird eine null pointer exception der methode parse(), die von init() aufgerufen wird, gemeldet. Meinst du das so?

Sicherheitshalber das ganze programm:

Code:
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class hitomi extends Applet {

    // ascii to gematria value matrix starting with $20 SPACE
    // michigan claremont style
    // ABGDHVZX+YKLMN$OPCQRSTkmnpc
    // special shins no special value: s = 300, # = 300
    private final static int[][] gematrix = {{
    // lettermatrix A
      0,0,0,300,50,0,0,0, 0,0,0,9,0,0,0,0,
      0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,
      0,1,2,90,4,0,0,3, 5,0,0,20,30,40,50,70,
     80,100,200,300,400,0,6,0, 8,10,7,0,0,0,0,0,
      0,0,0,90,0,0,0,0, 0,0,0,20,0,40,50,0,
     80,0,0,300,0,0,0,0, 0,0,0,0,0,0,0,0
    }, {
    // lettermatrix B, end letters have high values
      0,0,0,300,60,0,0,0, 0,0,0,9,0,0,0,0,
      0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,
      0,1,2,90,4,0,0,3, 5,0,0,20,30,40,50,70,
     80,100,200,300,400,0,6,0, 8,10,7,0,0,0,0,0,
      0,0,0,900,0,0,0,0, 0,0,0,500,0,600,700,0,
    800,0,0,300,0,0,0,0, 0,0,0,0,0,0,0,0
    }};

    private class word {//word objekt
        public int[] sum = new int[1];//sums by gematrix A and B
        public String w;//the word
    //public int nr;//word number in the verse by index
    //public word(String w, int sumA, int sumB) {
    //  this.w = w;
    //  this.sum[0] = sumA;
    //  this.sum[1] = sumB;
    //}
    }

    //verse object baut auf array aus word objekten auf
    private class verse {
        public int chap, rel;	//relative verse number
	public String id;	//e.g. 'GEN' or 'EXO' etc
	public word[] w;//words
	//constructor
	//public verse() {
	  //this.nr = nr;//by index
	  //this.id = id;
	//}
    }

    verse[] thisbook;

  public void init() {

    setBackground(Color.white);

    //later read once at first user plot request or display 666 as default
    //with vector: isEmpty(); flush with removeAll();
    //with hastable can store multiple parsed texts in mem, each is an array of
    //verse objects, for hashtable see [url]http://www.rgagnon.com/howto.html[/url]

    thisbook = parse("tanach.txt");
  }


  public void paint(Graphics g) {

    // Get the width and height of the Applet

    int aw = this.getSize().width;

    int ah = this.getSize().height;

    int as; // pixel diameter of the full wheel

    if (aw<ah) {as = aw;} else {as = ah;}

    // set up hitomi function parameters



    g.setColor(Color.orange);

    g.drawOval(0,0,as,as);
    g.drawString("Value: " + thisbook[0].w[0].sum[0], 10,10);



  }

  private verse[] parse(String f){
    // read claremont textfile by filename and parse contents into a verse[] and return that

    verse[] book = new verse[0];

    try {

      URL u = new URL(getCodeBase(), f);

      //later try FileReader in place of InputStreamReader
      BufferedReader br = new BufferedReader (new InputStreamReader(u.openStream()));

      int v=0, m=0;
      String l = "";

      l = br.readLine();

      if (l.startsWith("INIT")) {
	        //read number of verses
	        m = Integer.parseInt(l.substring(4,6));//max words in verse
	        v = Integer.parseInt(l.substring(6,10));//verses in text
      } else {
	  // search size and go back to file start or even save checked file
	  m = 50; v = 5855; //currently fall back to dummy safe values only
      }

      book = new verse[v-1]; //method returns this

      v=0;
      int w=0, i=0, j=0, c=0;//word number, index in line, j index of next space or end
      String wd="";
      byte[] b;

      while(null != (l = br.readLine())) {
          //calc and store this verse values
          book[v].id = l.substring(0, 3);//store tag GEN or EXO etc
	  book[v].chap = Integer.parseInt(l.substring(4,7));//chapter number
	  book[v].rel = Integer.parseInt(l.substring(8,11));//verse number
	  i=12;//verse words start at index 12 in the line of text
	  book[v].w = new word[m];
	  //word loop
	  while (i<l.length()) {
	      if (-1 == (j = l.indexOf(" ",i))) {
	          j = l.indexOf(".",i);
	      }
	      wd = l.substring(i,j);
              book[v].w[w].w = wd;
	      b = wd.getBytes();

              for (c = 0; i<j; c++) {
	          //use ascii code
                  book[v].w[w].sum[0] += gematrix[0][b[c]-32];
                  book[v].w[w].sum[1] += gematrix[1][b[c]-32];
                  i++;
              }
	      i++; w++;
	  }
      }
      br.close();
    }
    catch(IOException e) {
      //Graphics g = this.getGraphics();
      //g.drawString(e.getMessage, 0, 0);
    }
    return book;
  }
}


//end

Die Datei "tanach.txt" sieht so aus und bis auf die erste zeile sind alle zeilen gleich strukturiert.
Code:
INIT265852
GEN 001:001 BRASYT BRA ALHYm AT HSMYm VAT HARc.
GEN 001:002 VHARc HYTH THV VBHV VXSk OL-PNY THVm VRVX ALHYm MRXPT OL-PNY HMYm.
GEN 001:003 VYAMR ALHYm YHY AVR VYHY-AVR.
GEN 001:004 VYRA ALHYm AT-HAVR KY-+VB VYBDL ALHYm BYn HAVR VBYn HXSk.
GEN 001:005 VYQRA ALHYm LAVR YVm VLXSk QRA LYLH VYHY-ORB VYHY-BQR YVm AXD.
GEN 001:006 VYAMR ALHYm YHY RQYO BTVk HMYm VYHY MBDYL BYn MYm LMYm.
GEN 001:007 VYOs ALHYm AT-HRQYO VYBDL BYn HMYm ASR MTXT LRQYO VBYn HMYm ASR MOL
LRQYO VYHY-Kn.
...

Woran liegts? Außerdem gefällt mir nicht, das array book für alel fälle mit einer component zu initialiseren, für den fall, das keine datei gefunden wird. die rückgabe von 0 oder -1 im problemfall wäre besser, wenn das irgend möglich ist. aber die exception passiert irgendwo anders in der methode, denn die datei existiert, bzw wurde schonmal gefunden.
 
B

bygones

Gast
BITTE gib die Fehlermeldung dazu aus (wo, wie genau lautet der Fehler - Java sagt doch meistens genau wo es zwickt) !!!!
 

Dilandau

Aktives Mitglied
Erster beitrag wurde editiert. Gefragte Angaben sind jetzt vorhanden.

EDIT (Gedanken bei der problemsuche):

- vielleicht stimmt etwas mit der initialisierung der verse und word classen nicht oder/und mit deren deklaration. kein konstruktor, keine defaultwerte ... werte werden aber zugewiesen

- vielleicht kommt der pointer auf das verse array aus book nicht an die parse() aufrufende routine rüber
 

Illuvatar

Top Contributor
parse() ist lang :) , die Zeile wäre nützlicher, die müsste eigentlich auch ausgegeben werden.

Kannst du die nicht mit einem Kommentar markieren?
 

Dilandau

Aktives Mitglied
Die Zeile ist klar:

Code:
    int nw, w=6, v=0;

    //g.drawOval(0,0,as,as);
    if (((nw = thisbook[v].nw) != 0) && nw>w) {                <-- HIER
        //g.drawString("Value: " + thisbook[v].w[w].sum[0], 10,10);
    }

Dabei habe ich das ganze parse auf ein minimum reduziert:

Code:
private verse[] parse(String f){
   
    verse[] book = new verse[1];

    return book;
  }

Immernoch eine null-pointer exception in der "HIER" Zeile. Imo dürfte die if-bedingung nichtmal erfüllt sein, denn verse.nw wurde mit NULL initialisiert:

Code:
    private class verse {
        public int chap, rel;	//relative verse number
	public String id;	//e.g. 'GEN' or 'EXO' etc
	public int nw = 0;  //num words, can be used as end mark
	public word[] w;//words
	//constructor
	//public verse() {
	  //this.nr = nr;//by index
	  //this.id = id;
	//}
    }

Braucht ein int überhaupt initialisiert zu werden oder sind die default NULL? Was wäre "new verse[0]"? Ein Feld ohne Elemente? Mit [1] hat es imo ein Element (und zwar erreichbar an index [0]). Aber das scheint hier keine Rolle zu spielen.
 
B

bygones

Gast
ich denke thisbook[v] ist nicht initialisiert, daher ist es null -> nw = thisbook[v].nw wirft eine NullPointerException !

ints werden per default mit 0 (nicht null !!) initialisiert, alle Objekte (also auch arrays) sind per default null !!
 

Dilandau

Aktives Mitglied
Wenn du rauf scrollst, siehst du in init(), daß dort

thisbook = parse("tanach.txt");

initialisiert wird. der returnwert von parse(), das kurze beispiel von vorhin genügt, kommt vielleicht nicht rüber. thisbook soll ein array von verse objekten sein (das selbe, das in parse() unter dem namen book erzeugt wurde).



Was ist der Unteschied von 0 und null? Ist null nicht einfach eine konstante mit wert 0? Wegen der besseren lesbarkeit? Eine 0 kann mit O verwechselt werden.
 
G

Guest

Gast
0 ist eine Zahl (wie 1, 2 und 3 usw).

null ist ein Objekt das noch nicht intialisiert wurde, d.h es ist keiner Adresse im Speicher zugewiesen....

Das sind zwei komplett unterschiedliche Sachen !!
 
G

Guest

Gast
Bist du dir sicher, dass "thisbook" auch wirklich intialisiert wird ?!

Mach mal ne System.out.println(thisbook[0]) direkt nach dem du es einliest... wenn es klappt dann wars das nicht.

Falls du mit ner IDE arbeitest heißt das Zauberwort Debugger ;)
 

Dilandau

Aktives Mitglied
Mit sicherheit wird das NICHT initialisert oder kommt nicht durch wie beschrieben. Die frage ist, warum das nicht passiert.

Die Ausgabe von println: null, und zwar schon in parse(), vor dem return, wo das thisbook noch book sich nennt.


Die nächsten beiden Zeilen funktionieren also höchstwahrscheinlich nicht:

verse[] book = new verse[1];

oder später zusätzlich (momentan auskommentiert)

book = new verse[v];
 
L

LR

Gast
Dilandau hat gesagt.:
Mit sicherheit wird das NICHT initialisert oder kommt nicht durch wie beschrieben. Die frage ist, warum das nicht passiert.

Die Ausgabe von println: null, und zwar schon in parse(), vor dem return, wo das thisbook noch book sich nennt.


Die nächsten beiden Zeilen funktionieren also höchstwahrscheinlich nicht:

verse[] book = new verse[1];

oder später zusätzlich (momentan auskommentiert)

book = new verse[v];


Also wenn ich nicht noch zu müde bin, dann liegt das einfach daran, dass Du zwar mit
Code:
    verse[] book = new verse[1];
ein Array of Verse mit Größe 1 anlegst, aber dieses Array noch mit NULL-Objekten gefüllt ist.

Demnach müsstest Du einfach vor der Benutzung eines Verses diesen als Objekt instanziieren
Code:
    Verse tmpVerse = new Verse();
diesen dann mit Werten füllen:
Code:
    tmpVerse.irgendwas = wasanderes;
usw.
und dann ins Array packen...
Code:
    book[index] = tmpVerse;


Oder bin ich grad im falschen Film ?

Egal, probiers mal aus.

LR
 
B

bygones

Gast
Jepp, das schaut danach aus... Vielleicht habe ich auch was übersehen - aber scheinbar werden die Arrayfelder nicht initialisiert !

PS: Habe ich schon gesagt: Klassen werden großgeschrieben !! Also anstatt verse solltest du Verse nehmen (sonst wird es ziemlich unübersichtlich, was Variable was Klasse ist !!)
 

Dilandau

Aktives Mitglied
Instantierung ist es. Gestern zuletzt noch selbst rausgefunden mit einer google suche nach "java klassen in klassen". Das brachte das gaanze eienn großen Schritt weiter. Auf den ersten Blick erscheint die Instantierung blöd, aber die Objekte in der selben Schleife zu erzeugen, in der sie mit Werten gefüllt werden - abhängig vom bedarf - ist einfach ressourceschonend.

Die Kleinschreibung verdanke ich dem Dateisystem. Irgendwas fat in linux, das nur kleinbuchstaben akzeptiert, wenns drauf ankommen soll. Den unterschied zwischen variablen und Klassen sehe ich nicht, bis auf das "class" wörtchen.

Noch was: die beiden klassen word und verse werden in hitomi {} definiert. JAvac legt aber offenbar zwei extra dateien dafür an. also insgesamt drei? Muss das sein? Oder soll ich die nacher einzeln auf den server laden?
 

Illuvatar

Top Contributor
javac wird vermutlich eine Klasse hitomi$verse machen. verse ist ja schließlich auch eine eigene Klasse. Das muss sein, und du musst sie einzeln hochladen.
 
B

bygones

Gast
so kann man es auch sagen...

jar ist einfach ein Packformat, in dass du deine Klassen (src und oder class) packen kannst. Mit Hilfe einer sog. Manifestdatei, in der du angibst, was die Mainklasse ist, kann man daraus ein executable jar file machen.D.h. bei drauf-klicken startet dein Programm.

Wenn du hier im Forum mit dem Wort "jar" suchst wirst du ziemlich fündig :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
C Null Pointer Exception Java Basics - Anfänger-Themen 10
G Null Pointer Exception Java Basics - Anfänger-Themen 4
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
T Null Pointer Exception Java Basics - Anfänger-Themen 4
T Null Pointer Exception Java Basics - Anfänger-Themen 8
H Null Pointer Exception Problem Java Basics - Anfänger-Themen 3
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
D Null-Pointer-Exception Java Basics - Anfänger-Themen 5
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
J Null Pointer Exception in der "ob Null"-Abfrage? Java Basics - Anfänger-Themen 37
B Null Pointer Exception Java Basics - Anfänger-Themen 7
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
K Null pointer exception in Methode Java Basics - Anfänger-Themen 4
D Null Pointer Exception Java Basics - Anfänger-Themen 8
D null pointer exception Java Basics - Anfänger-Themen 3
M Null Pointer Exception Java Basics - Anfänger-Themen 18
T Null Pointer Exception Java Basics - Anfänger-Themen 2
F Null Pointer Exception #2 Java Basics - Anfänger-Themen 5
I Unerklärliche Null-Pointer-Exception bei JRadioButton Array Java Basics - Anfänger-Themen 2
H Null Pointer Exception? Java Basics - Anfänger-Themen 4
G Null Pointer Exception Java Basics - Anfänger-Themen 10
N null pointer exception Java Basics - Anfänger-Themen 6
S Null-Pointer-Exception Java Basics - Anfänger-Themen 5
B Null Pointer Exception Java Basics - Anfänger-Themen 2
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
R Null Pointer Exception von anderer Klasse aus. Java Basics - Anfänger-Themen 2
N NULL Pointer Exception Java Basics - Anfänger-Themen 4
J Java.lang Null Pointer Exception Java Basics - Anfänger-Themen 3
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
Z Null Pointer?! WHY? Java Basics - Anfänger-Themen 11
J Null-Pointer -> Code-Zeile ausgeben möglich? Java Basics - Anfänger-Themen 7
N null pointer exeption problem Java Basics - Anfänger-Themen 4
H Null pointer Exeption Java Basics - Anfänger-Themen 4
R Thread geht jetzt - aber - Fehler "Null-Pointer" Java Basics - Anfänger-Themen 20
S Vector wirdn icht gefüllt, null Pointer, was ist der Fehler Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
P Buffer und null Java Basics - Anfänger-Themen 3
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
N null in String replacen Java Basics - Anfänger-Themen 16
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
K Bufread.readLine())!= null wie beenden? Java Basics - Anfänger-Themen 4
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J null exception Array Java Basics - Anfänger-Themen 5
tobikoch String x= null Bedeutung Java Basics - Anfänger-Themen 9
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
O JavaArray Null Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
D Best Practice Konvention - Klassenmembers auf null setzen? Java Basics - Anfänger-Themen 2
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
I Polymorphie Null Objekt Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
V String Array gegen null-Eintrag sichern Java Basics - Anfänger-Themen 11
R Gleitkommazahlen ohne führende Null Java Basics - Anfänger-Themen 10
M array = null Java Basics - Anfänger-Themen 2
F String equals NULL Problem Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
R Property Value als null setzen Java Basics - Anfänger-Themen 1
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
J Fehlerhafte Ausgabe "null" Java Basics - Anfänger-Themen 2
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
W Input/Output DataOutputStream gibt NULL zurück Java Basics - Anfänger-Themen 5
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D Null Ausgabe obwohl wert zugewiesen Java Basics - Anfänger-Themen 5
J Alias null Java Basics - Anfänger-Themen 4
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben