Hallo zusammen,
ich habe eine Frage zu folgendem Quelltext:
In den Methoden datenLesen() und datenSchreiben() wird jeweils von datei eine neue Instanz erzeugt.
Warum ist dies so, bzw. was bewirkt dies?
Wenn ich in der Methode datenLesen() die Zeilen datei = new RandomAccessFile("daten.bin","r"); auskommentiere, dann erscheint eine NullPointerException.
Warum erscheint diese Exception? Liegt es an der If - Abfrage im Konstruktor?
Vielen Dank!
Viele Grüße
ich habe eine Frage zu folgendem Quelltext:
Java:
import java.awt.GridLayout;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class Binaer2 extends JFrame{
//automatisch über Eclipse ergänzt
private static final long serialVersionUID = 1679025732306143406L;
//eine Instanzvariable vom Typ RandomAccessFile
private RandomAccessFile datei;
//der Konstruktor
public Binaer2(String titel) {
super(titel);
//ein GridLayout mit 2 Spalten anwenden
setLayout(new GridLayout(0, 2));
//gibt es die Datei daten.bin schon?
File dateiTest = new File("daten.bin");
//wenn nicht, erstellen wir sie neu
if (dateiTest.exists() == false)
datenSchreiben();
//die Daten lesen
datenLesen();
//Größe setzen, Standard-Verhalten festlegen und anzeigen
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//die Methode zum Lesen
private void datenLesen() {
try {
//geöffnet wird die Datei daten.bin im Nur-Lesen-Modus
datei = new RandomAccessFile("daten.bin","r");
//20 Mal Daten als int lesen
for (int i = 0; i < 20; i++)
//und ein neues Label aus dem Wert erzeugen
add(new JLabel(Integer.toString(datei.readInt())));
datei.close();
}
catch (IOException e ) {
JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten");
}
//das Fenster neu "packen"
pack();
}
//die Methode zum Schreiben
private void datenSchreiben() {
try {
//geöffnet wird die Datei daten.bin im Lese- und Schreibmodus
datei = new RandomAccessFile("daten.bin","rw");
//20 Werte als int in die Datei schreiben
for (int i = 0; i < 20; i++)
datei.writeInt(i * 10);
datei.close();
}
catch (IOException e ) {
JOptionPane.showMessageDialog(this, "Beim Schreiben ist ein Problem aufgetreten");
}
}
}
In den Methoden datenLesen() und datenSchreiben() wird jeweils von datei eine neue Instanz erzeugt.
Warum ist dies so, bzw. was bewirkt dies?
Wenn ich in der Methode datenLesen() die Zeilen datei = new RandomAccessFile("daten.bin","r"); auskommentiere, dann erscheint eine NullPointerException.
Warum erscheint diese Exception? Liegt es an der If - Abfrage im Konstruktor?
Vielen Dank!
Viele Grüße