PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java-Programmier-Problem



Bigzed
03.09.2008, 20:13
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:

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:3 9)
at java.awt.Button.processActionEvent(Button.java:392 )
at java.awt.Button.processEvent(Button.java:360)
at java.awt.Component.dispatchEventImpl(Component.jav a:4413)
at java.awt.Component.dispatchEvent(Component.java:42 43)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.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

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:


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

madfool
03.09.2008, 20:25
Du greifst auf ein 12. Array-Element zu welches es nicht gibt, denn du hast den Array mit 11 Speicherplätzen angelegt (ArrayIndexOutOfBoundsException):



Boolean zutaten[] = new Boolean[11];


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



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


Von 0 bis 11 sind aber 12 Schritte.

Gruß,
D.

Bigzed
03.09.2008, 20:32
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!

JBR
03.09.2008, 21:01
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

foexle
04.09.2008, 08:11
ausserdem würde ich dir kein AWT für ein GUI empfehlen sondern swing !

Bigzed
05.09.2008, 15:03
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

GambaJo
05.09.2008, 15:47
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

Bigzed
05.09.2008, 15:58
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

JBR
24.12.2008, 13:45
Da die Urkunden ja nun alle Verschickt sein sollten: Wie ist es bei dir gelaufen ?

Ticha
24.12.2008, 17:58
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