Java-Programmier-Problem

Bigzed

Bigzed

Jungspund
Hallo Leute,

ich programmiere gerade das erste mal an einem etwas komplexeren Problem in Java, allerdings scheiter ich schon an der ersten Ausgabe in das GUI. Mein Problem an dem ich scheiter ist wahrscheinlich ziemlich simpel. Ich habe mir eine Klasse "Pizzavision" geschrieben bzw. den ersten Keim davon und möchte einfach mal als Test über den Button1 auf der GUI diese Klasse erschaffen, ein paar Methoden ausführen und eine Ausgabe erhalten allerdings tut dieses Programm bis jetzt nur eine Fehlermeldung ausspucken, obwohl die Klasse und der GUI alleine Kompiliert werden können. Erst wenn ich auf den Button drücke passiert etwas unvorhergesehenes.

Und zwar bekomme ich diese Fehlermeldung:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 11
 at Pizzavision.<init>(Pizzavision.java:15)
 at PizzaAufgabe.button1_ActionPerformed(PizzaAufgabe.java:55)
 at PizzaAufgabe$2.actionPerformed(PizzaAufgabe.java:39)
 at java.awt.Button.processActionEvent(Button.java:392)
 at java.awt.Button.processEvent(Button.java:360)
 at java.awt.Component.dispatchEventImpl(Component.java:4413)
 at java.awt.Component.dispatchEvent(Component.java:4243)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Doch ich weiß leider noch nichts damit anzufangen, daher wäre mir eine umfassende Erklärung ganz lieb :))
Hier natürlich noch mein Quellcode
GUI-Klasse
Code:
import java.awt.*;
import java.awt.event.*;

/**
  * Copyright
  *    by
  * Bigzed
  *
  *
  */

public class PizzaAufgabe extends Frame {
  // Anfang Variablen
  private Button button1 = new Button();
  private Label label1 = new Label();
  // Ende Variablen

  public PizzaAufgabe(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    button1.setBounds(112, 16, 75, 25);
    button1.setLabel("button1");
    button1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button1_ActionPerformed(evt);
      }
    });
    cp.add(button1);
    label1.setBounds(56, 128, 37, 16);
    label1.setText("label1");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void button1_ActionPerformed(ActionEvent evt) {
  Pizzavision pizza = new Pizzavision();
  pizza.addZutat("Erbsen");
  pizza.addZutat("Mais");
  pizza.deleteZutat("Mais");
  pizza.addZutat("Tomaten");
  label1.setText(pizza.showPizza());
  }

  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new PizzaAufgabe("PizzaAufgabe");
  }
}

Und hier die Klasse "Pizzavision" die ich erschaffe:

Code:
import java.awt.*;


public class Pizzavision {
  Boolean zutaten[] = new Boolean[11];

  public Pizzavision() {
    //Zählvariable
    int i = 0;

    //Zutaten liste leeren
    while (i < 12) {
      zutaten[i] = false;
      i++;
    }
  }

  //Zutat hinzufügen
  public boolean addZutat(String zutat) {
    if (zutat == "Kaese") { //Käse:Index=0
      zutaten[0] = true;

      return true;
    } else if (zutat == "Tomatensosse") { //Tomatensosse:Index=1
      zutaten[1] = true;

      return true;
    } else if (zutat == "Tomaten") { //Tomaten:Index=2
      zutaten[2] = true;

      return true;
    } else if (zutat == "Oliven") { //Oliven:Index=3
      zutaten[3] = true;

      return true;
    } else if (zutat == "Zwiebeln") { //Zwiebeln:Index=4
      zutaten[4] = true;

      return true;
    } else if (zutat == "Kochschinken") { //Kochschinken:Index=5
      zutaten[5] = true;

      return true;
    } else if (zutat == "Ananas") { //Ananas:Index=6
      zutaten[6] = true;

      return true;
    } else if (zutat == "Champignos") { //Champignos:Index=7
      zutaten[7] = true;

      return true;
    } else if (zutat == "Salami") { //Salami:Index=8
      zutaten[8] = true;

      return true;
    } else if (zutat == "Thunfisch") { //Thunfisch:Index=9
      zutaten[9] = true;

      return true;
    } else if (zutat == "Mais") { //Mais:Index=10
      zutaten[10] = true;

      return true;
    } else if (zutat == "Erbsen") { //Erbsen:Index=10
      zutaten[11] = true;

      return true;
    } else {
      return false;
    }
  }

  //Zutat entfernen
  public boolean deleteZutat(String zutat) {
    if (zutat == "Kaese") { //Käse:Index=0
      zutaten[0] = false;

      return true;
    } else if (zutat == "Tomatensosse") { //Tomatensosse:Index=1
      zutaten[1] = false;

      return true;
    } else if (zutat == "Tomaten") { //Tomaten:Index=2
      zutaten[2] = false;

      return true;
    } else if (zutat == "Oliven") { //Oliven:Index=3
      zutaten[3] = false;

      return true;
    } else if (zutat == "Zwiebeln") { //Zwiebeln:Index=4
      zutaten[4] = false;

      return true;
    } else if (zutat == "Kochschinken") { //Kochschinken:Index=5
      zutaten[5] = false;

      return true;
    } else if (zutat == "Ananas") { //Ananas:Index=6
      zutaten[6] = false;

      return true;
    } else if (zutat == "Champignos") { //Champignos:Index=7
      zutaten[7] = false;

      return true;
    } else if (zutat == "Salami") { //Salami:Index=8
      zutaten[8] = false;

      return true;
    } else if (zutat == "Thunfisch") { //Thunfisch:Index=9
      zutaten[9] = false;

      return true;
    } else if (zutat == "Mais") { //Mais:Index=10
      zutaten[10] = false;

      return true;
    } else if (zutat == "Erbsen") { //Erbsen:Index=10
      zutaten[11] = false;

      return true;
    } else {
      return false;
    }
  }

  public String showPizza() {
    String Ausgabe;
    int i;
    Ausgabe = "";

    for (i = 0; i < 12; i++) {
      if (zutaten[i] == true) {
        Ausgabe = Ausgabe + i + ",";
      }
    }

    return Ausgabe;
  }

  private void clearZutaten() {
    int i; //Zählvariable

    //Zutaten liste leeren
    for (i = 0; i < 12; i++) {
      zutaten[i] = false;
    }
  }
}

ps.: schon mal Danke für die Hilfe
 
Du greifst auf ein 12. Array-Element zu welches es nicht gibt, denn du hast den Array mit 11 Speicherplätzen angelegt (ArrayIndexOutOfBoundsException):

Code:
  Boolean zutaten[] = new Boolean[11];

Hier werden 11 Einträge angelegt (0 - 10).

Code:
    while (i < 12) {
      zutaten[i] = false;
      i++;
    }

Von 0 bis 11 sind aber 12 Schritte.

Gruß,
D.
 
Man bin ich doof. Stimmt ja der Indize gibt ja die Anzahl der Elemtente und nicht den Index des letzten Elemtens an. *autschn*
Danke für die schnelle Hilfe!
 
http://www.bwinf.de

PS: Du kannst natürlich Fragen stellen - aber wenn du darauf verzichten könntest die vollständige Implementierung zu posten wäre ich dir sehr verbunden
 
Zuletzt bearbeitet:
ausserdem würde ich dir kein AWT für ein GUI empfehlen sondern swing !
 
Ja, tut mir leid, ich hab vielleicht etwas viel Quelltext gepostet. Werde ich beim nächsten mal beachten.
Das ich Swing benutzen sollte hab ich auch schon gelesen aber darf ich fragen was genau der Vorteil ist?

lg
bigzed
 
Darauf tanzt es sich besser :D


Leichtgewichtige Komponenten
Swing-Komponenten werden direkt von Java gerendert und sind nicht von nativen Betriebssystemkomponenten abhängig. Dadurch funktionieren alle Swing-Komponenten auf allen Plattformen gleich, unabhängig davon, ob die entsprechende Plattform eine Komponente zur Verfügung stellt oder nicht. Der Nachteil ist, dass eine Swing-Anwendung nicht wie eine für das Betriebssystem entwickelte Anwendung aussieht. Das kann aber durch eine Auswahl an entsprechenden Pluggable Look-and-Feels kompensiert werden. Diese Eigenschaft wird mit dem englischen Wort Lightweight UI beschrieben (lightweight = all-Java language).

Unterschiede
Im Vergleich zu AWT hat man mit Swing folgende zusätzliche Komponenten, die zur Oberflächenerzeugung genutzt werden können:

* Keyboard Accelerators, also Tastenkombinationen zur Steuerung von Komponenten
* Drag & Drop
* Setzen des Look and Feel
* Tooltips
* automatisches Double Buffering
* neue Layout-Manager/Panels
* Anwendungen mit Multiple Document Interface
* „Java2D“, umfangreiche Funktionalität zum Erzeugen zweidimensionaler Grafik
* zusätzliche Komponenten, um Tabellen und Baumstrukturen darzustellen
 
Ok dann weß ich jetzt warum man Swing-Komponenten nehmen sollte.
So da ich gerade ja eigentlich mein erstes Projekt in Java schreibe und ich dafür Bildbearbeitungs Bibliotheken gebrauchen könnte wollte ich mal fragen, ob jemand von euch ein gutes Tutorial in diese Richtung kennt. Bis jetzt hab ich nur ein halbwegs gutes Gefunden und das wäre der Abschnitt über dieses Thema von Galileocomputing und "Java ist auch nur eine Insel".

lg
bigzed
 
Da die Urkunden ja nun alle Verschickt sein sollten: Wie ist es bei dir gelaufen ?
 
Benutz für Swing am besten NetBeans. Da hast du ein KlickiBunti tool für Swing. Das macht das ganze sehr einfach. Aber sei dir Gewiss, dass Swing sehr kompliziert ist.

greetz Ticha
 

Ähnliche Themen

"non blocking console input" wieder rückgängig machen?

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Shellskript - Fehler in Cron

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Zurück
Oben