NullPointerException > java.nio.BufferUnderflowException

Cottonwood

Aktives Mitglied
Hi,

wahrscheinlich mal wieder ein Anfängerfehler. Ich sehe einfach nicht, warum hier eine "java.lang.NullPointerException" kommt.

[JAVA=3]import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class ReadPDF{

private static boolean testsw;
private static String userPath=System.getProperty("user.home")+System.getProperty("file.separator");
private static long inLength;
private static ByteBuffer[] inBuffer;

public static long read(File in) throws IOException {
testsw=Parameters.retrieveBoolean("ReadPDF.testsw");
FileChannel eingabe=new FileInputStream(in).getChannel();
inLength=0;
if (testsw) ErrorWindow.errorMsg("v0.1 ReadPDF:21 size="+eingabe.size());
try {
inLength=eingabe.read(inBuffer);
} catch (IOException e) {ErrorWindow.errorMsg("v0.1 ReadPDF:24 "+e.toString());
throw e;
} finally {
if (eingabe != null) eingabe.close();
else {
ErrorWindow.errorMsg("v0.1 ReadPDF:29 couldn't open "+in.getAbsolutePath());
ErrorWindow.systemExit(-1);
}
}
return inLength;
}
}
[/code]

Code:
v0.1 ReadPDF:21 size=258968, Thread=main
Exception in thread "main" java.lang.NullPointerException
	at java.nio.channels.FileChannel.read(Unknown Source)
	at de.virginiacity.software.ReadPDF.read(ReadPDF.java:23)
	at de.virginiacity.software.NKAbrech.main(NKAbrech.java:61)
 
Zuletzt bearbeitet:

Cottonwood

Aktives Mitglied
Meinst du so(?):

[JAVA=3]import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class ReadPDF{

private static boolean testsw;
private static String userPath=System.getProperty("user.home")+System.getProperty("file.separator");
private static long inLength;

public static long read(File in) throws IOException {
testsw=Parameters.retrieveBoolean("ReadPDF.testsw");
FileChannel eingabe=new FileInputStream(in).getChannel();
inLength=0;
if (testsw) ErrorWindow.errorMsg("v0.1 ReadPDF:20 size="+eingabe.size());
ByteBuffer[] inBuffer=new ByteBuffer[(int) eingabe.size()];
try {
inLength=eingabe.read(inBuffer);
} catch (IOException e) {ErrorWindow.errorMsg("v0.1 ReadPDF:24 "+e.toString());
throw e;
} finally {
if (eingabe != null) eingabe.close();
else {
ErrorWindow.errorMsg("v0.1 ReadPDF:29 couldn't open "+in.getAbsolutePath());
ErrorWindow.systemExit(-1);
}
}
return inLength;
}
} [/code]

Das klappt leider auch nicht:
Code:
v0.1 ReadPDF:20 size=258968, Thread=main
Exception in thread "main" java.lang.NullPointerException
	at sun.nio.ch.IOUtil.remaining(Unknown Source)
	at sun.nio.ch.IOUtil.read(Unknown Source)
	at sun.nio.ch.FileChannelImpl.read0(Unknown Source)
	at sun.nio.ch.FileChannelImpl.read(Unknown Source)
	at java.nio.channels.FileChannel.read(Unknown Source)
	at de.virginiacity.software.ReadPDF.read(ReadPDF.java:23)
	at de.virginiacity.software.NKAbrech.main(NKAbrech.java:61)
 

Volvagia

Top Contributor
Du übergibst ein leeres Array.
Übrigens solltest du, wenn du inLength als Klassenvariable anlegst die Methode synchronisieren, und die ByteBuffers werden nach dem Vorgang nicht mehr verwendet.
 

Cottonwood

Aktives Mitglied
Du übergibst ein leeres Array.
Ja, da will ich aber doch auch erst rein lesen.
Übrigens solltest du, wenn du inLength als Klassenvariable anlegst die Methode synchronisieren
Warum?
die ByteBuffers werden nach dem Vorgang nicht mehr verwendet.
Das ist richtig. Aber ich habe die ByteBuffers auch nur hier lokal gemacht, um das Problem hier nachvollziehbar zu machen. Eigentlich liegen sie in einem anderen Programm.
 

Volvagia

Top Contributor
Ja, da will ich aber doch auch erst rein lesen.

Ich bin den Code gefolgt, und offenbar ist das der Erste Zugriff auf das Array:
Java:
// Iterate over buffers to populate native iovec array.
	int count = offset + length;
	for (int i=offset; i<count; i++) {
		ByteBuffer buf = bufs[i]; //<- Element wird gelesen
		if (buf.isReadOnly())
			throw new IllegalArgumentException("Read-only buffer");
		int pos = buf.position(); //<- Zugriff auf 'null'

Weil so jeder Methodenaufruf auf die selbe Variable zugreift.
 
S

SlaterB

Gast
du willst Daten einlesen, bytes, aber die ByteBuffer-Objekte selber, die im Array enthalten sind, musst du anlegen

> Warum?
stell dir vor zwei Threads arbeiten gleichzeitig die Methode ab, speichern quer durcheinander ihre Ergebnisse in der Variablen,
kommt in normalen Programmen nicht vor, wahrscheinlich nicht wichtig
 

Cottonwood

Aktives Mitglied
Okay. Das mit dem Synchronisieren habe ich jetzt verstanden.

Ich bin den Code gefolgt, und offenbar ist das der Erste Zugriff auf das Array:
Java:
// Iterate over buffers to populate native iovec array.
	int count = offset + length;
	for (int i=offset; i<count; i++) {
		ByteBuffer buf = bufs[i]; //<- Element wird gelesen
		if (buf.isReadOnly())
			throw new IllegalArgumentException("Read-only buffer");
		int pos = buf.position(); //<- Zugriff auf 'null'
Sorry, aber ich verstehe nicht, was du mir damit sagen willst. Du setzt vielleicht zu viel voraus.

du willst Daten einlesen, bytes, aber die ByteBuffer-Objekte selber, die im Array enthalten sind, musst du anlegen
Wie lege ich den denn an? Kannst du mir da ein Beispiel geben.
 

Cottonwood

Aktives Mitglied
mit ByteBuffer[] habe ich es noch nie gesehen, kann ich auch nicht finden
Da habe ich wohl zu kompliziert gedacht. Ich habe das jetzt mal auf ByteBuffer (ohne []) umgestellt und es läuft jetzt zumindest mal durch den read:

[JAVA=3]import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class ReadPDF{

private static boolean testsw;
private static String userPath=System.getProperty("user.home")+System.getProperty("file.separator");
private static long inLength;

public static long read(File in) throws IOException {
testsw=Parameters.retrieveBoolean("ReadPDF.testsw");
FileChannel eingabe=new FileInputStream(in).getChannel();
inLength=0;
if (testsw) ErrorWindow.errorMsg("v0.1 ReadPDF:20 size()="+eingabe.size());
if (testsw) ErrorWindow.errorMsg("v0.1 ReadPDF:21 position()="+eingabe.position());
int inSize=(int) eingabe.size();
ByteBuffer inBuffer=ByteBuffer.allocate(inSize);
try {
inLength=eingabe.read(inBuffer);
} catch (IOException e) {ErrorWindow.errorMsg("v0.1 ReadPDF:26 "+e.toString());
throw e;
} finally {
if (testsw) ErrorWindow.errorMsg("v0.1 ReadPDF:29 position()="+eingabe.position());
if (eingabe != null) eingabe.close();
else {
ErrorWindow.errorMsg("v0.1 ReadPDF:32 couldn't open "+in.getAbsolutePath());
ErrorWindow.systemExit(-1);
}
}
return inLength;
}
} [/code]

Code:
v0.1 ReadPDF:20 size()=258968, Thread=main
v0.1 ReadPDF:21 position()=0, Thread=main
v0.1 ReadPDF:29 position()=258968, Thread=main

Danke erst mal. Ich teste jetzt damit und wenn's klappt, dann schließe ich den Thread. Sonst melde ich mich wieder.
 

Cottonwood

Aktives Mitglied
Leider kann ich die gelesenen Daten nicht ausgeben. Ich brauche also hier doch noch einmal Hilfe.
Was mache ich hier falsch? Warum bekomme ich in Zeile 41 eine java.nio.BufferUnderflowException?

[JAVA=3]import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class ReadRTF{

private static boolean testsw;
//private static String userPath=System.getProperty("user.home")+System.getProperty("file.separator");
private static long inLength;

public static long read(File in) throws IOException {
testsw=Parameters.retrieveBoolean("ReadRTF.testsw");
FileChannel eingabe=new FileInputStream(in).getChannel();
inLength=0;
if (testsw) ErrorWindow.errorMsg("v0.1 ReadRTF:19 size()="+eingabe.size());
if (testsw) ErrorWindow.errorMsg("v0.1 ReadRTF:20 position()="+eingabe.position());
int inSize=(int) eingabe.size();

ByteBuffer inBuffer=ByteBuffer.allocate(inSize);
try {
inLength=eingabe.read(inBuffer);
} catch (IOException e) {ErrorWindow.errorMsg("v0.1 ReadRTF:26 "+e.toString());
throw e;
} finally {
if (testsw) ErrorWindow.errorMsg("v0.1 ReadRTF:29 position()="+eingabe.position());
if (eingabe != null) eingabe.close();
else {
ErrorWindow.errorMsg("v0.1 ReadRTF:32 couldn't open "+in.getAbsolutePath());
ErrorWindow.systemExit(-1);
}
}
int inPos=0, inRest=(int) inLength, lineLength=80;
while (inRest>0) {
if (inRest<80L) lineLength=inRest;
byte[] tmp=new byte[lineLength];
if (testsw) ErrorWindow.errorMsg("v0.1 ReadRTF:40 inPos="+inPos+", lineLength="+lineLength);
inBuffer.get(tmp, inPos, lineLength);
System.out.println(tmp);
inRest=inRest-lineLength;
}
return inLength;
}
} [/code]

Code:
v0.1 ReadRTF:19 size()=258968, Thread=main
v0.1 ReadRTF:20 position()=0, Thread=main
v0.1 ReadRTF:29 position()=258968, Thread=main
v0.1 ReadRTF:40 inPos=0, lineLength=80, Thread=main
Exception in thread "main" java.nio.BufferUnderflowException
	at java.nio.HeapByteBuffer.get(Unknown Source)
	at de.virginiacity.software.ReadRTF.read(ReadRTF.java:41)
	at de.virginiacity.software.NKAbrech.main(NKAbrech.java:33)
 

Dekker

Bekanntes Mitglied
BufferOverlow: Du willst reinschreiben obwohl Buffer schon komplett voll ist.
BufferUnderflow: Du willst etwas aus dem Buffer rausholen oder lesen, obwohl der Buffer leer ist.
 

Cottonwood

Aktives Mitglied
So weit ist mir das schon klar. Aber warum ist der leer. Die Prints in den Zeilen 20 und 29 zeigen m. E., dass der read in Zeile 25 erfolgreich war. Und wenn das stimmt, dann sollte kein BufferUnderflow kommen.

Was von alledem sehe ich falsch?
 
S

SlaterB

Gast
hast du kein Tutorial zu ByteBuffer außer hier im Forum alles nachzufragen?
ich persönlich kenne die Klasse auch nicht, hab mir jetzt paar Methoden angeschaut und rewind() scheint irgendwas zurückzusetzen,
im Zweifel keine unbekannten Klassen verwenden
 

Cottonwood

Aktives Mitglied
ich persönlich kenne die Klasse auch nicht, hab mir jetzt paar Methoden angeschaut und rewind() scheint irgendwas zurückzusetzen,
Danke für den Tipp. Das war's. :toll:
Ich verstehe allerdings nicht, warum ein get mit absoluter Position ein rewind voraussetzt.

im Zweifel keine unbekannten Klassen verwenden
Da kann man dann aber Java auch nicht lernen. Dies ist mein 2. Programm. Wenn ich beim 1. Programm keine unbekannten Klassen verwendet hätte, dann wäre ich längst nicht mehr bei Java.???:L

hast du kein Tutorial zu ByteBuffer außer hier im Forum alles nachzufragen?
Irgendwo hast du ja Recht. Man braucht eigentlich kein Forum.:autsch:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Java NullPointerException Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 4
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
P Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 3
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
S Fehler: "java.lang.NullPointerException" Java Basics - Anfänger-Themen 6
I Erste Schritte Ausführfehler: java.lang.NullPointerException Java Basics - Anfänger-Themen 3
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J java.lang.NullPointerException Java Basics - Anfänger-Themen 18
K Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 6
K OOP java.lang.NullPointerException Java Basics - Anfänger-Themen 2
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
S Fehlermeldung: java.lang.NullPointerException Java Basics - Anfänger-Themen 10
A Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 16
K java.lang.NullPointerException in Array bei Arraylistübergabe Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException Was tun? Java Basics - Anfänger-Themen 7
J java.lang.NullPointerException . Java Basics - Anfänger-Themen 5
G java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException - Bitte helft mir! Java Basics - Anfänger-Themen 5
S java.lang.NullPointerException Fehler bei Umrechnung Java Basics - Anfänger-Themen 3
P java.lang.NullPointerException Java Basics - Anfänger-Themen 19
M java.lang.NullPointerException at . Java Basics - Anfänger-Themen 4
S java.lang.nullpointerexception bei arrayübergabe Java Basics - Anfänger-Themen 30
S java.lang.NullPointerException bei Bildern Java Basics - Anfänger-Themen 13
P java.lang.NullPointerException was ist das? Java Basics - Anfänger-Themen 7
A Java NullPointerException Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException beim objekt Java Basics - Anfänger-Themen 3
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben