Compiler-Fehler Woher kommt der NullPointer? (Collections & Iterator)

Abulinix

Mitglied
Moin Leute.
Ich habe einen Vector in dem 16 Elemente sind.
Wenn ich die jetzt aber mit einem Iterator abrufen will, bricht er nach dem 15. mit 'nem NullPointer ab.
Ich hab' grad keine Ahnung, wieso.

Java:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Vector;

import com.vividsolutions.*;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;

public class Aufgabe_1_WKT {
	
		public Aufgabe_1_WKT() {
			
		}
	
		String inputDatei;
		Vector<Geometry> speicherVector = new Vector<Geometry>();

		public void liesWKT(String inputDatei) {
		
			try {
				FileInputStream fsDatei = new FileInputStream(inputDatei);  // Schreibt in den Stream
				WKTReader wktInput = new WKTReader();
				InputStreamReader holeWKT = new InputStreamReader(fsDatei);
				
				Geometry geom = wktInput.read(holeWKT);
				while(geom != null) {
					
					geom = wktInput.read(holeWKT);
				
					speicherVector.add(geom);
				}
				holeWKT.close();
				
			} catch (FileNotFoundException e) {
				System.out.println("Datei nicht gefunden.");
				e.printStackTrace();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		};
		
		public int anzahl() {
			return speicherVector.size();
		}
		
		public void mur() {
			Envelope env = new Envelope();
			Iterator<Geometry> it = speicherVector.iterator();
			while(it.hasNext()) {
				//System.out.print(this.anzahl() + "   ");
				Geometry g = it.next();
				env.expandToInclude(g.getEnvelopeInternal());
				System.out.println(env.getMaxX());
			
			};
			System.out.println("grr" + env.getMaxX());
			
		}
	
			
			
	public static void main(String[] args) {
		
		Aufgabe_1_WKT blubb = new Aufgabe_1_WKT();
		blubb.liesWKT("Deutschland.wkt");
		System.out.println(blubb.anzahl());
		blubb.mur();
		

	}

}
 
Java:
if(speicherVector  == null)
{
   continue;
}


Frag einfach ab, ob dein speicherVector null ist. Wenn ja dann soll er den Datensatz überspringen und weiter machen(Schleife vorrausgesetzt). Hatte ich bei einer Datumsbegrenzung in meinem Programm auch 😉.


...
Oder hab ich was falsch verstanden ^^?
 
Java:
if(speicherVector  == null)
{
   continue;
}


Frag einfach ab, ob dein speicherVector null ist. Wenn ja dann soll er den Datensatz überspringen und weiter machen(Schleife vorrausgesetzt). Hatte ich bei einer Datumsbegrenzung in meinem Programm auch 😉.


...
Oder hab ich was falsch verstanden ^^?
^^^ Die Frage ist doch ob null in der collection sein darf, falls ja wäre dein continue richtig, ansonsten eben eine NullPointerException 😉
 
Das schöne an den Stacktracen ist, dass er dir sogar die Zeile sagt, wo es schiefgeht. Daher den immer schon mitposten 🙂

Sonst sagt meine Glaskugel anhand deine Beschreibung:
Java:
Envelope env = new Envelope();
Iterator<Geometry> it = speicherVector.iterator();
while(it.hasNext()) {
    //System.out.print(this.anzahl() + "   ");
    Geometry g = it.next();
    env.expandToInclude(g.getEnvelopeInternal());
    System.out.println(env.getMaxX());
};
Hier könnte das Objekt
Code:
g
null sein, vor allem weil deine Lese-Schleife falsch arbeitet:

Java:
                Geometry geom = wktInput.read(holeWKT);
                while(geom != null) {
                    
                    geom = wktInput.read(holeWKT);
                
                    speicherVector.add(geom);
                }
Hier wird beim ersten Mal 2x gelesen und 1x geschrieben! Vertausche die beiden Zeilen in der Schleife. Ich kann mir gut vorstellen dass so ein null in den Vektor rutscht.

*EDIT* Da hab ich mich so beeilt, dennoch zu spät 😉
 
Zuletzt bearbeitet:
generell würde ich das ETWAS anderst lösen

*beispiel anhand network-i/o eines BufferedReader

Java:
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line="";
while((line=in.readLine())!=null)
{
//TO-DO
}

so wird garantiert das auch das ERSTE objekt verfügbar ist und die schleife abbricht sobald line==null ist ... somit kann auch innerhalb des while()-loop niemals line==null auftreten ... höchstens line.equals("") worauf dann noch zu prüfen wäre ...
 

Zurück
Oben