TextField Array

GalaxyWarrior

Erfahrenes Mitglied
Hallo,
ich habe versucht über Arrays eine variable Anzahl von Textfeldern zu generieren, allerdings erhalte ich bei dem Versuch die Textfelder zum Panel l2 hinzuzufügen einige Fehler:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at gauss.startActionPerformed(gauss.java:188)
 at gauss$2.actionPerformed(gauss.java:78)
 at java.awt.Button.processActionEvent(Button.java:388)
 at java.awt.Button.processEvent(Button.java:356)
 at java.awt.Component.dispatchEventImpl(Component.java:3955)
 at java.awt.Component.dispatchEvent(Component.java:3803)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Die Textfelder erzeuge ich mit:
Code:
148:  private TextField[] xa;
149:  private TextField[] ya;
150:  private TextField[] za;
151:
152:  public void felder(int i) {
153:
154:    TextField[] xa = new TextField[i];
155:    for(int make = 0; make < i; make++){
156:      TextField erzeuger = new TextField();
157:      erzeuger.setBounds(64, 64+(make*24), 49, 21);
158:      xa[make] = erzeuger;
159:    }
160:
161:    TextField ya[] = new TextField[i];
162:    for(int make = 0; make < i; make++){
163:      TextField erzeuger = new TextField();
164:      erzeuger.setBounds(120, 64+(make*24), 49, 21);
165:      ya[make] = erzeuger;
166:    }
167:
168:    TextField za[] = new TextField[i];
169:    for(int make = 0; make < i; make++){
170:      TextField erzeuger = new TextField();
171:      erzeuger.setBounds(176, 64+(make*24), 49, 21);
172:      za[make] = erzeuger;
173:    }
174:  }

und mit
Code:
177:  public void startActionPerformed(ActionEvent evt) {
178:    l1.setVisible(false);
179:    systemx = Integer.parseInt(x.getText());
180:    systemy = Integer.parseInt(y.getText());
181:    felder(systemx);
182:    int step;
183:    for(step = 0; step < systemx; step++){
184:    System.out.println("x"+step);
185:      l2.add(xa[step]);
186:    }
187:    for(step = 0; step < systemx; step++){
188:    System.out.println("y"+step);
189:      l2.add(ya[step]);
190:    }
191:    for(step = 0; step < systemx; step++){
192:    System.out.println("z"+step);
193:      l2.add(za[step]);
194:    }
195:    l2.setVisible(true);
196:
197:  }

werden sie zu l2 hinzugefügt.

Ich hoffe ihr könnt mir helfen

Gruß GalaxyWarrior
 
Moin,
in der Exception steht ja schon genau die Zeilennummer, wo es kracht. Also sieh dort nach, ob auf ein Objekt zugegriffen werden soll, was nicht vorhanden ist (NULL).
Wo kommt eigentlich das l2 her? Ich sehe das nirgends.
 
Das Panel l2 wird schon vorher im Constructor erzeugt, ich habe ja nur den relevanten Code gepostet, aber ich weiß nicht warum er mit Zeil 184 Probleme hat, bin ich blind?

Gruß GalaxyWarrior
 
Wenn du die Fehler von oben nach unten durchgehst...
Such mal die letzte für dich erreichbare Stelle (Zeilennummer)
und schreib die mal hier rein. Oder Schreib einfach alle Zeilen die er anmeckert mal hier rein:
 
Also, der Fehler ist
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at gauss.startActionPerformed(gauss.java:184)

das wäre dann die Zeile:

Code:
l2.add(xa[step]);

wie oben schon geschrieben
Allerdings weiß ich nicht was er daran auszusetzen hat.

Gruß GalaxyWarrior
 
Ich nehme an, Du hast l2 nur deklariert und nicht instanziert.
Aber wenn Du nicht zeigst, wie
"Das Panel l2 wird schon vorher im Constructor erzeugt" im Code aussieht, können wir nur mutmaßen.
 
Code:
import java.awt.*;
import java.awt.event.*;

public class gauss extends Frame {
  // Anfang Variablen
    private Panel l2 = new Panel(null);
  ...
  // Ende Variablen
  public gauss(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 706;
    int frameHeight = 652;
    setSize(frameWidth, frameHeight);
    Panel cp = new Panel(null);
    add(cp);
    l2.setBounds(0, 0, 689, 617);
    l2.setVisible(false);
    cp.add(l2);
    setVisible(true);
  }

Das ist der relevante Code den ihr haben wollt, oder?
CP ist ein Standart Panel welches von dem Editor den ich verwende automatisch generiert wurde. Wenn ich statisch die Textfelder zu l2 adde dann geht das auch alles prima.

Gruß GalaxyWarrior
 
Habe den Fehler gefunden. Man kann auf die Array Elemente nicht aus einer anderen Methode zugreifen, aber warum? Kann mir das jemand erklären?
 
Ach so, klar. Du hast das Array xa (und auch die anderen) in der Methode

public void felder(int i)

deklariert. Damit bleiben diese Arrays - wie alles andere auch, was in anderen Methoden deklariert wird - nur dort sichtbar (=zugreifbar). Schlag dazu mal nach unter dem Begriff Sichtbarkeit, Instanzvariablen, Klassenvariablen, lokale Variablen usw.
 
Achso, nur ist mir ein wenig schleierhaft wie ich denn die Array außerhalb einer Methode füllen soll. Denn ich kann dann ja keine schleifen etc. verwenden.
 
Zurück