Hallo Experten,
ich habe noch ein dringendes Problem:
Ich habe eine Klasse formData angelegt:
class formData
{
public String formGruppe,
fname,
sqlcmd,
style;
public int arg0,
arg1;
public long ID;
}
die ich in einer Servlet-Klasse instanziiere:
formData[] fdat = new formData[200];
und aus dessen init()-Methode aufrufe:
(i als Zähler)
fdat[i].formGruppe = "irgendEinString";
(...)
Das Servlet schmeißt eine NullPointerException (Fehler 500).
Leider finde ich keine Lösung, ich vermute dass ich gewisse Grundsätze der OOP noch nicht drauf hab. Oder liegts am Array-Konstrukt? Geht das so gar nicht?
Ich danke Euch für schnelle Antworten,
die besten Grüße
Marc
Hallo!
Ich bin mir nicht sicher, ob Du es schon so machst…
public class MyServlet extends HttpServlet {
formData[] data;
public void init() {
data = new formData[200];
for (int i...)
data[i].formGruppe = "Servlet-Klasse";
} //init
...
} // servlet
HTH
Patrick
Leider keine Lösung
Hallo Patrick,
ich habe
formData[] data = new formData[200];
nicht in der init()-Methode sondern schon als Klassenvariable instanziiert. Aber auch wenn ich es so programmiere wie Du schreibst, bekomme ich die NullPointerException.
Wer hat noch ne Idee??
Marc
Kannst Du das Problem vielleicht etwas genauer
darstellen?
Wie rufst Du das Servlet auf?
Machst Du nochwas anderes in dem Servlet?
Gruss
Patrick
Check mal das server_error_log.
Vielleicht gibt das etwas Aufschluss.
Gruss
Patrick
also ich habs jetzt erstmal hinbekommen, indem ich ein neues
formData fd = new formData();
definiert habe und dann
fd.variable1 = "text1";
fd.variable2 = "text2";
(...)
fdat[i] = fd
Da gibts also ein Problem mit dem Array. Offensichtlich kann man nicht so einfach die Klassenvariablen eines Klassenarrays ansprechen (so wie fdat[i].variableX = xy)
Ich möchte aber nicht den ganzen Code umhauen, zumal ich an vielen Stellen die fdat[i].variablen ändern möchte.
Marc
Versuch mal:
MyServlet {
formData[] fdat = new formData[200];
init() {
for (int i...) {
fdat[i] = new formData();
fdat[i].formGruppe = "irgendEinString";
}
...
}
...
}
M.E. nach hast Du nur das Array instanziert und nicht
die Objekte in dem Array.
Gruss
Patrick
Dein Problem rührt daher, dass du in Java nur Referenzen auf Objekte deklarieren kannst. Wenn du also schreibst:
MyClass x;
dann erzeugst du keine Instanz (Objekt) der Klasse MyClass sondern nur eine Variable die eine Referenz auf eine Instanz von MyClass enthalten _kann_. Diese Variable wird mit null initialisiert, also hat keinen Inhalt, zeigt auf nichts.
Mit:
MyClass x;
x = new MyClass();
oder kurz:
MyClass x = new MyClass();
erzeugst du eine Instanz.
Bei deinem Array ist es dasselbe mit:
MyClass[] ax = new MyClass[200];
erzeugst du ein Array das 200 Referenzen auf Instanzen von MyClass enthalten kann. Alle Referenzen werden aber wiederum mit null initialisiert, d. h. du mußt wie schon von Patrick beschrieben mit:
MyClass[i] = new MyClass();
erst das Objekt erzeugen.
Die NullPointerException wird geworfen wenn du versuchst auf über eine Variable auf ein Objekt zuzugreifen, die Variable aber null enthält, d. h. auf gar kein Objekt zeigt.
Grüße, Robert
PS: Das hat aber nicht direkt was mit OO-Konzepten zu tun, eher eine Frage der Realisierung der Sprache. Z. B. in C++ wird zwischen einem Objekt und einem Pointer auf ein Objekt unterschieden:
MyClass x;
x.doAnything();
MyClass *x = new MyClass();
x->doAnything();
Nochmal Grüße, Robert :o)
Vielen Dank!!! Das war’s! (o.T.)
-)
Danke vielmals!!
Deine Erläuterung fand ich sehr hilfreich!!!
Marc