Queue: Wie kann hier ein null-Pointer Exception auftreten?!

E

eneR

Gast
Hallo,
ich hab ein kleines Problem: Bei diesem Programm tritt regelmäßig dieser Error auf:
Console hat gesagt.:
Exception in thread "Thread-0" java.lang.NullPointerException
at java.util.PriorityQueue.siftDownComparable(PriorityQueue.java:679)
at java.util.PriorityQueue.siftDown(PriorityQueue.java:669)
at java.util.PriorityQueue.poll(PriorityQueue.java:578)
at de.aypac.proj.filestory_synchronizer.services.arbeitsordnerBeobachter.Buffer.poll(ArbeitsordnerBeobachter.java:153)
at de.aypac.proj.filestory_synchronizer.services.arbeitsordnerBeobachter.ArbeitsordnerBeobachter.run(ArbeitsordnerBeobachter.java:48)
und ich habe keine Idee, wie der zu stande kommt.

Hier der "produzierende" Code:
[JAVA=117]class Buffer extends Thread implements JNotifyListener {
private final Queue<FileEvent> _eventBuffer;

Buffer() {
_eventBuffer = new PriorityQueue<FileEvent>();
}

@Override
public synchronized void fileRenamed(int wd, String rootPath, String oldName, String newName) {
_eventBuffer.add(new FileRenamedEvent(wd, rootPath, oldName, newName));
}

@Override
public synchronized void fileModified(int wd, String rootPath, String name) {
_eventBuffer.add(new FileModifiedEvent(wd, rootPath, name));
}

@Override
public synchronized void fileDeleted(int wd, String rootPath, String name) {
_eventBuffer.add(new FileDeletedEvent(wd, rootPath, name));
}

@Override
public synchronized void fileCreated(int wd, String rootPath, String name) {
_eventBuffer.add(new FileCreatedEvent(wd, rootPath, name));
}

public FileEvent poll() {
return _eventBuffer.poll();
}

public FileEvent poll(long time) {
FileEvent e = null;
long waited = 0L;

while (e == null && waited < time) {
e = _eventBuffer.poll();
try {
sleep(1);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
waited++;
}

return e;
}

public FileEvent take() {
FileEvent e = null;

while (e == null) {
e = _eventBuffer.poll();
try {
sleep(1);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

return e;
}[/code]

Wäre super, wenn jemand eine tolle Idee dazu hätte :)

P.S. Der Fehler tritt nur auf, wenn ich in einem Sub-Verzeichnis des "JNotifyListener"-belegten Verzeichnisses eine Änderung vornehme...
 
G

Gast2

Gast
Was steht rund um Zeile
Code:
ArbeitsordnerBeobachter.java:153
?
 
E

eneR

Gast
Die Zeilen in dem Codeausschnitt sind "echt", daher steht in der Zeile
Code:
e = _eventBuffer.poll();
.
 
B

bygones

Gast
du musst ein null element in deiner Queue haben, da in die NPE ja in der PriorityQueue geschieht, wo das interne Element genutzt wird. wenn das null ist -NPE
 
E

eneR

Gast
du musst ein null element in deiner Queue haben, da in die NPE ja in der PriorityQueue geschieht, wo das interne Element genutzt wird. wenn das null ist -NPE

Aber wie kommt das da rein? Alle Methoden, die die Klasse hat, sind hier auch im Code. Keine davon produziert
Code:
_eventBuffer.add(null);
oder übersehe ich da was?
 
E

eneR

Gast
Auch dieser Code bringt kein "!!!" raus, nur die NPE in (dann) Zeile 168:

[JAVA=165]if (_eventBuffer.contains(null)) {
System.err.println("!!!");
}
e = _eventBuffer.poll();[/code]
 

bERt0r

Top Contributor
Erm leerst du in dieser Schleife nicht deine Queue aus? Für jede Millisekunde die du wartest entfernst du ein weiteres Element.
 
E

eneR

Gast
Nope.
Retrieves and removes the head of this queue, or returns null if this queue is empty.
Darum ja auch die
Java:
while (e==null) {
e = _eventBuffer.poll();
}
Schleife. Damit "poll"t er so lange, bis irgendwie ein FileEvent in der Queue liegt.
 
E

eneR

Gast
Java:
class Buffer extends Thread implements JNotifyListener {
	private final Queue<FileEvent> _eventBuffer;

	Buffer() {
		_eventBuffer = new PriorityQueue<FileEvent>();
	}

	@Override
	public synchronized void fileRenamed(int wd, String rootPath, String oldName, String newName) {
		fuegeEin(new FileRenamedEvent(wd, rootPath, oldName, newName));
	}

	@Override
	public synchronized void fileModified(int wd, String rootPath, String name) {
		fuegeEin(new FileModifiedEvent(wd, rootPath, name));
	}

	@Override
	public synchronized void fileDeleted(int wd, String rootPath, String name) {
		fuegeEin(new FileDeletedEvent(wd, rootPath, name));
	}

	@Override
	public synchronized void fileCreated(int wd, String rootPath, String name) {
		fuegeEin(new FileCreatedEvent(wd, rootPath, name));
	}

	private void fuegeEin(FileEvent fe) {
		if (fe != null) {
			if (!_eventBuffer.add(fe)) {
				System.err.println("!!!");
			}
		}
	}

	public FileEvent poll() {
		if (_eventBuffer.isEmpty()) {
			return null;
		} else {
			return _eventBuffer.poll();
		}
	}

	public FileEvent poll(long time) {
		FileEvent e = null;
		long waited = 0L;

		while (_eventBuffer.isEmpty() && waited < time) {
			try {
				sleep(1);
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			waited++;
		}
		if (!_eventBuffer.isEmpty()) {
			e = _eventBuffer.poll();
		}

		return e;
	}

	public FileEvent take() {
		FileEvent e = null;

		while (e == null) {
			e = poll(1);
		}

		return e;
	}
}
Funktioniert auch nicht. Gleicher Fehler.
Ich verzweifel langsam echt. Wenn ich das step-by-step debugge, tritt der Fehler nicht auf.
 

bERt0r

Top Contributor
Warum benutzt du keine BlockingQueue? Das was du ausprogrammierst gibts doch schon alles und nochdazu effizienter gelöst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Queue.remove() -> no such element exception Allgemeine Java-Themen 17
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
Kirby.exe Nullpointer Exception bei Queue Allgemeine Java-Themen 5
P Durchlaufen einer Queue Allgemeine Java-Themen 9
W Queue Implementierung Allgemeine Java-Themen 6
S Queue Allgemeine Java-Themen 2
M Queues und Queue Interface Allgemeine Java-Themen 3
F Message Queue Tipps Allgemeine Java-Themen 3
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
D priority queue sortieren Allgemeine Java-Themen 10
F Threads, Queue, Gemeinsame Daten Allgemeine Java-Themen 6
G QUEUE und Threads Allgemeine Java-Themen 5
H Queue ausgeben Allgemeine Java-Themen 5
M Queue für spider/crawler? Allgemeine Java-Themen 2
M Reflection Queue auslesen Allgemeine Java-Themen 6
E Executors - wie kann ich die Queue leeren? Allgemeine Java-Themen 2
A Queue, beim dem das letzte Element herausfällt Allgemeine Java-Themen 4
C Untidy Priority Queue Allgemeine Java-Themen 2
S Suche schnellen Container Typ Queue Allgemeine Java-Themen 7
P Queue, Mausevents Allgemeine Java-Themen 4
G Queue erzeugen Allgemeine Java-Themen 2
T Queue-Hilfe benötigt Allgemeine Java-Themen 4
G Parameteriesierung von Queue funktioniert nicht Allgemeine Java-Themen 2
M Queue Allgemeine Java-Themen 11
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
N Ist Selenium hier das richtige Werkzeug? Allgemeine Java-Themen 1
Zrebna Wieviele Testfälle muss man hier schreiben? (Software Engineering) Allgemeine Java-Themen 13
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
J Einrückungstool mit Farblicher hervorhebung wie hier? Allgemeine Java-Themen 3
V VisualVM Was erkennt ihr hier? Allgemeine Java-Themen 9
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
X Wer kann mir das hier erklären? Programm frisst RAM! Allgemeine Java-Themen 11
S Singleton hier sinnvol? Allgemeine Java-Themen 20
E Wieso returnt das hier 1? Allgemeine Java-Themen 3
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
G Warum kommt hier NullPointerException? Allgemeine Java-Themen 3
F Threading oder kein Threading - das ist hier die Frage. Allgemeine Java-Themen 23
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
egrath Anonyme Methode - warum hier kein Compilerfehler Allgemeine Java-Themen 2
F Gutes Threads Tutorial hier aber trotzdem eine Frage Allgemeine Java-Themen 7
M Spring oder nicht, das ist hier die Frage Allgemeine Java-Themen 3
S Was ist hier falsch? Allgemeine Java-Themen 16
G wer muss hier wen aufrufen? Allgemeine Java-Themen 7
M Kann man hier noch was rausholen? Allgemeine Java-Themen 16
A Was passiert hier? Allgemeine Java-Themen 13
I Ist JNI hier richtig? Allgemeine Java-Themen 8
B Gibts sogar hier Allgemeine Java-Themen 3
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
S An internal error occurred during: Launching null argument Allgemeine Java-Themen 1
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
L Google Guice Field Injection returns null Allgemeine Java-Themen 2
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
N MsgPack - Null Check Allgemeine Java-Themen 5
T JasperReports mit Null Pointer Allgemeine Java-Themen 3
DanielsLPecke Compiler-Fehler Warum ist der String null? Allgemeine Java-Themen 10
M Warten bis Variabel nicht null ist Allgemeine Java-Themen 18
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
D Java Process OutputStream ist null Allgemeine Java-Themen 4
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
D Problem mit führender Null bei Schlüsselerzeugung Allgemeine Java-Themen 5
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
K Image beim catchen ist immer null Allgemeine Java-Themen 9
B Load of Known null Value Allgemeine Java-Themen 9
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
Tobse Vererbung null aus Elternklasse "dominant"? Allgemeine Java-Themen 15
I newInstance() liefert null zurück Allgemeine Java-Themen 4
R Attribut null Allgemeine Java-Themen 6
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
E rückgabewert ist immer null Allgemeine Java-Themen 2
N List auf null prüfen Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
R dateFormat - Uhr fängt nicht bei null an Allgemeine Java-Themen 2
P Null in ArrayList Allgemeine Java-Themen 3
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
mongole Formatter + null Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
A Umgang mit null Allgemeine Java-Themen 16

Ähnliche Java Themen


Oben