eneR: Buffer mithilfe eine Queue produziert NPE: VERZWEIFELUNG

Beitrag lesen

Hi,
ich habe mir einen kleinen Event-Buffer geschrieben (um doppelte Events (wie created und modified) vom JNotifyListener abzufangen und verschobene Dateien zu erkennen).
Jetzt schmeißt das Drec*sding aber bei jeder verschobenen Datei oder Änderung einer Datei in einem Subverzeichnis ein NPE (siehe unten).

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(); //Errorline aka line 184  
		}  
  
		return e;  
	}  
  
	public FileEvent take() {  
		FileEvent e = null;  
  
		while (e == null) {  
			e = poll(1);  
		}  
  
		return e;  
	}  
}

Ich verzweifel langsam echt. Wenn ich das step-by-step debugge, tritt der Fehler nicht auf.

Der Fehler:
[code=error]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:174)
at de.aypac.proj.filestory_synchronizer.services.arbeitsordnerBeobachter.Buffer.take(ArbeitsordnerBeobachter.java:184)[/code]