ArrayIndexOfBounds

Schlagdraufunschluss_124

Aktives Mitglied
Hallo,

der Compiler zeigt mir einen Fehler bei folgendem Code an:

Java:
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Gui extends JFrame {

    Data data;

    public Gui(Data data) {
        this.data = data;
             
        setSize(500, 500);
        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //pack();
        setVisible(true);

    }

    public void paint(Graphics g) {
     
        for (int y = 0; y < data.getTileNum().length; y++) { // IndexOfBounds

     
         
            for (int x = 0; x <data.getTileNum()[x].length; x++) {
             
                switch (data.getTileNum()[y][x]) {
                case 1:
                    g.drawImage(data.getTiles()[0],40*x, 40*y, 40, 40, null);
                    break;
                case 2:
                    System.out.println("Malen Erde");
                }
            }

        }
     
    }

}

Allerdings stimmen die beiden getter-Methoden und liefern das richtige zurück...
Wenn ich aber den getter für die 2. Forschleife durch 4 ersetze funktioniert es plötzlich o_O
Warum gibt er dann einen Error aus?
(die Länge vom array [2][4]) was auch durch einen sysout belegt wird)

Hier ist der StackTrace, falls ihr damit etwas anfangen könnt...
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
at Gui.paint(Gui.java:27)
at javax.swing.RepaintManager$4.run(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1200(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Sour
 

JStein52

Top Contributor
Bist du sicher dass die Exception nicht eher hier irgendwo fliegt:
Code:
            for (int x = 0; x <data.getTileNum()[x].length; x++) {
               
                switch (data.getTileNum()[y][x]) {
 

Schlagdraufunschluss_124

Aktives Mitglied
Bist du sicher dass die Exception nicht eher hier irgendwo fliegt:
Code:
            for (int x = 0; x <data.getTileNum()[x].length; x++) {
              
                switch (data.getTileNum()[y][x]) {
Nein, der Compiler stört sich irgenwie an der Art und weise wie den index des Arrays aufrufe...


das sollte wohl ein y sein...

Wie selber rausfinden? Debugger :)
Warum ein y? -> Für die zeilen hab ich doch schon in der oberen Schleife gesorgt...
(sprich zeile 0, -> alle xWerte aus zeile 0; zeile 1, -> alle xWerte von zeile 1, usw.)
Oder denke ich gerade falsch?
 

Schlagdraufunschluss_124

Aktives Mitglied
Tatsächlich funzt es mit "Y" statt "x" -> Aber warum?

Edit: Mir fällt gerade auf, dass die Tiles halb abgeschnitten sind, weil sie irgendwie zu weit oben plaziert sind :(
-> Habt ihr hierfür eine Lösung ?
 

Oben