null != null ?
Ich war mir nicht sicher, ob die Frage nicht ins
Swing-Teilforum gehört; schließlicht geht es um
ein JTable. Nach genauerer Analyse, bin ich mir
jedoch sicher, daß es sich nicht um ein Swing-
sondern um ein allgemeines Java-Problem handelt.
Ich erstelle eine Applikation, die es ermöglicht,
Tabellen einer, beim Provider gehosteten Datenbank,
anzuzeigen und anwendungs-zugeschnitte Änderungen
vorzunehmen.
Hierzu habe ich ein inneres, DefaultTableModel
erweiterndes, TableModel geschrieben, daß seine
Daten aus der umgebenden Klasse bezieht um das
dort gelegen JTable zu füttern. Doch wie ich es
auch anstelle, fliegt mir schon während der
Konstruktorabarbeitung, eine NullpointerException
um die Ohren.
Ich habe den Code, um ihn hier zu posten und
kompilierbar zu belassen, auf's Allernotwendigste
beschnitten; wundert euch also nicht, wenn er
etwas sinnbefreit anmutet.
Ausgabe
Wie man sieht, ruft DefaultTableModel's Konstruktor
bereits getRowCount() auf; hab' ich ja auch nix dagegen.
Aber bereits bei der Abfrage, ob daten null ist, knallts.
Zuerst dachte ich, daß es irgendein Konstruktor
Timerproblem ist, und der Konstruktur der umgebenden
Klasse daten noch nicht erzeugt hat. Deshalb
habe ich den Aufruf in eine zusätzliche Methode crash
verlegt; aber wie man sieht, hat das damit nichts zu tun.
Ganz merkwürdig ist, daß unter Java 1.5 alles problemlos
läuft; aber ich brauche nun mal 1.4 erzeugten Code und der
crasht immer obwohl doch beidesmal die gleichen
Libraries Verwendung finden?
Habe ich jetzt ein Brett (den Maibaum :shock: ) vorm Kopf
oder was ist hier los?
Ich war mir nicht sicher, ob die Frage nicht ins
Swing-Teilforum gehört; schließlicht geht es um
ein JTable. Nach genauerer Analyse, bin ich mir
jedoch sicher, daß es sich nicht um ein Swing-
sondern um ein allgemeines Java-Problem handelt.
Ich erstelle eine Applikation, die es ermöglicht,
Tabellen einer, beim Provider gehosteten Datenbank,
anzuzeigen und anwendungs-zugeschnitte Änderungen
vorzunehmen.
Hierzu habe ich ein inneres, DefaultTableModel
erweiterndes, TableModel geschrieben, daß seine
Daten aus der umgebenden Klasse bezieht um das
dort gelegen JTable zu füttern. Doch wie ich es
auch anstelle, fliegt mir schon während der
Konstruktorabarbeitung, eine NullpointerException
um die Ohren.
Ich habe den Code, um ihn hier zu posten und
kompilierbar zu belassen, auf's Allernotwendigste
beschnitten; wundert euch also nicht, wenn er
etwas sinnbefreit anmutet.
Code:
import javax.swing.*;
import javax.swing.table.*;
public class Tiny {
String[][] daten;
void crash() {
new JTable(new EModel());
}
class EModel extends DefaultTableModel {
public int getRowCount() {
// Hier gibts die Exception
return daten == null ? 0 : daten.length;
}
}
public static void main(String[] args) {
new Tiny().crash();
}
}
Code:
Exception in thread "main" java.lang.NullPointerException
at Tiny$EModel.getRowCount(Tiny.java:13)
at javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:198)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:98)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:80)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:60)
at Tiny$EModel.<init>(Tiny.java:10)
at Tiny.crash(Tiny.java:8)
at Tiny.main(Tiny.java:17)
bereits getRowCount() auf; hab' ich ja auch nix dagegen.
Aber bereits bei der Abfrage, ob daten null ist, knallts.
Zuerst dachte ich, daß es irgendein Konstruktor
Timerproblem ist, und der Konstruktur der umgebenden
Klasse daten noch nicht erzeugt hat. Deshalb
habe ich den Aufruf in eine zusätzliche Methode crash
verlegt; aber wie man sieht, hat das damit nichts zu tun.
Ganz merkwürdig ist, daß unter Java 1.5 alles problemlos
läuft; aber ich brauche nun mal 1.4 erzeugten Code und der
crasht immer obwohl doch beidesmal die gleichen
Libraries Verwendung finden?
Habe ich jetzt ein Brett (den Maibaum :shock: ) vorm Kopf
oder was ist hier los?