String Array Problem
dR.LoL
- java
0 lina-0 dR.LoL
1 Marc Reichelt0 dR.LoL
Hi Leute,
Ich habe das hier in meinem Tooli:
String[] strFailure = new String[] { };
Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:
strFailure[intFailures] = "A-Number:2short";
intFailures++;
Allerdings bekomme ich das Programm nicht hin, es stürtzt ab bei diesem Punkt.
Was ist daran Falsch?
Gruss vom LoL
PS: Ganze Fehlermeldung ist diese hier, sind für mich Java-Neuling etwas viele, teils auch sehr unverständliche, doch ich hoffe ihr könnt mir helfen, mein Problem zu lösen.
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at SRETT.SRETTGUI.onClickmyRateButton(SRETTGUI.java:564)
at SRETT.SRETTGUI$17.actionPerformed(SRETTGUI.java:239)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
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)
moin dR.LoL :)
Hi Leute,
Ich habe das hier in meinem Tooli:
Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:
strFailure[intFailures] = "A-Number:2short";
intFailures++;
Was ist daran Falsch?
Das sagt dir die Fehlermeldung ;)
Im Ernst: java.lang.ArrayIndexOutOfBoundsException: 1 bedeuted, dass du auf irgendeinen Teil des Arrays zugreifen willst, der nicht existiert (in diesem Fall: der erste Eintrag des Arrays).
Warum ist das so?
String[] strFailure = new String[] { };
Hier legst du ein leeres Array an.
Ja genau - Arrays sind nicht dynamisch. Die Größe die ihnen bei der Initialisierung zugewiesen wird, behalten sie auch. In deinem Fall hat das Array die Länge 0.
Wenn du nun aber mit strFailure[intFailures] = "A-Number:2short"; auf die Stelle des Arrays zugreifen willst, die durch die Variable intFailures angegeben wird, schlägt das natürlich fehl.
Als Lösung schlage ich dir zwei alternative Dinge vor:
1. Gib deinem Array die benötigte Größe: String[] strFailure = new String[intFailures];
2. Nutze eine dynamische Liste wie ArrayList oder Vector oder dergleichen.
liebe Grüße aus Berlin
lina-
Hallo Lina, super erklärung der Fehlermeldung.
Danke auch dir für deine Hilfe, Problem is nu erledigt!
Grüsse aus Luzern! ;-))
Hallo dR.LoL,
Ich habe das hier in meinem Tooli:
String[] strFailure = new String[] { };Dann kommen immer Abfragen, die Werte überprüfen und Fehler in dieses Array schreiben sollen, like this:
strFailure[intFailures] = "A-Number:2short";
intFailures++;Allerdings bekomme ich das Programm nicht hin, es stürtzt ab bei diesem Punkt.
Was ist daran Falsch?
Aber klar doch dass es abstürzt. Schließlich erzeugst du hiermit ein leeres String-Array:
String[] strFailure = new String[] { }; // definiert ein Array von String-Objekten
// da die Länge eines Arrays zu Beginn festgelegt werden muss,
// holt er sich die Länge deines Arrays aus deiner Initialisierung
System.out.println(strFailure.length); // gibt 0 aus
Wie du es richtig machen könntest:
String[] strFailure = new String[] { "eins", "zwei", "drei" };
System.out.println(strFailure.length); // gibt 3 aus
Wenn du nun ein Array von 1000 String-Objekten anlegen willst, ohne sie gleich festzulegen, geht das so:
String[] strFailure = new String[1000];
System.out.println(strFailure.length); // gibt 1000 aus
Du solltest dir mal das Kapitel 3.6 ("Arrays") des Buches Java ist auch eine Insel durchlesen.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Hallo dR.LoL,
Hallo auch ;-))
Ich danke dir, für das coole E-Book!!! Und deine Hilfe:
String[] strFailure = new String[1000];
Funktioniert perfekt!
Gruss vom LoL