Java Applet kann nicht initialisiert werden

GSXR

Grünschnabel
Hallo ich will eine Art Memory Spiel erzeugen. Bei einem klick auf den Button soll das dahinter liegende Textfeld sichtbar werden (später wird dieses durch ein Image ersetzt).
Jedoch wird entweder folgender Fehler:
Code:
java.lang.ArrayIndexOutOfBoundsException: 0
 at Raetsel_02.darstellung(Raetsel_02.java:42)
 at Raetsel_02.init(Raetsel_02.java:23)
 at sun.applet.AppletPanel.run(AppletPanel.java:353)
 at java.lang.Thread.run(Thread.java:534)
oder
Code:
java.lang.ArrayIndexOutOfBoundsException: 0
 at Raetsel_02.darstellung(Raetsel_02.java:42)
 at Raetsel_02.init(Raetsel_02.java:23)
 at sun.applet.AppletPanel.run(AppletPanel.java:353)
 at java.lang.Thread.run(Thread.java:534)
wenn ich statt new TextField[i] - new TextField[19] angebe.

Code:
// Autor: Nico Litschke
// Datum: 09.12.2004

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Raetsel_02 extends Applet{
  // Anfang Variablen
  int ASpalte = 20, AZeile = 20, i, j;
  TextField[] tfAusgabe;
  Button[] button;
  // Ende Variablen

  public void init () {

    setLayout(null);
    setBackground(Color.yellow);
    setSize(420,600);
    // Anfang Komponenten
    for(int j=0; j <= 4; j++){
       for(int i=0; i <= 3; i++){
        darstellung();
        if (i<3){
        ASpalte += 100;
        }
        else{
         ASpalte = 20;
        }
       }
       AZeile += 100;
    }


    // Ende Komponenten

  }
  // Anfang Ereignisprozeduren
     private void darstellung(){
      Font font = new Font("MS Sans Serif", 1, 40);
      tfAusgabe = new TextField[19];
      tfAusgabe[i].setVisible(false);
      tfAusgabe[i].setBackground(Color.lightGray);
      tfAusgabe[i].setEditable(false);
      tfAusgabe[i].setFont(font);
      tfAusgabe[i].setBounds(ASpalte,AZeile,80,80);
      add(tfAusgabe[i]);
      button = new Button[i];
      button[i].setLabel("hite");
      button[i].setBackground(Color.lightGray);
      button[i].setFont(font);
      button[i].setVisible(true);
      button[i].setBounds(ASpalte,AZeile,80,80);
      button[i].addActionListener (new ActionListener () {
      public void actionPerformed (ActionEvent evt) {
        buttonActionPerformed (evt);}});
      add(button[i]);
     }

  public void buttonActionPerformed (ActionEvent evt) {
   tfAusgabe[i].setVisible(true);
   button[i].setVisible(false);
  }
  // Ende Ereignisprozeduren

}
Wie kann ich diesen Fehler beheben?
 
Also, du musst natürlich das textfeld und denn Button auch initen, nicht nur das Feld

Code:
tfAusgabe[i]= new TextField();  

...

button[i] = new Button();

und zweitens, pass auf wo du ein Feld initest! du machst das in einer Funktion, welche 7 mal aufgerufen wird, und somit erhälst du 7 mal 20 felder!

Weiters, wenn du 20 Felder brauchst musst du das Array auch mit 20 initen! und nicht mit 19

Mein vorschlag, inite die Arrays in der Funktion init() und achte darauf welche variablen du wirklich global brauchst

cu, hares


ps: schau dir nochmal die Variable i an welche du für die Funktion darstellung() verwendest, so wird das nicht funktionieren!
 
Zuletzt bearbeitet:
Zurück