Java “线程中的异常”;AWT-EventQueue-0“;IndexOutOfBoundsException错误

Java “线程中的异常”;AWT-EventQueue-0“;IndexOutOfBoundsException错误,java,loops,exception,Java,Loops,Exception,我有一个面板,我用图片创建城市对象,并将其显示在地图上。当我点击图片时,它会显示一个新的框架,里面有一个名字。但当我点击这张图片时,它显示了这个错误 Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.rangeCheck(ArrayList.java:638) at java.util.ArrayL

我有一个面板,我用图片创建城市对象,并将其显示在地图上。当我点击图片时,它会显示一个新的框架,里面有一个名字。但当我点击这张图片时,它显示了这个错误

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.rangeCheck(ArrayList.java:638)
    at java.util.ArrayList.get(ArrayList.java:414)
    at superworld.SuperPanel$1.mouseClicked(SuperPanel.java:60)
    at java.awt.Component.processMouseEvent(Component.java:6530)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6292)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4883)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我写了这样的东西:

package superworld;

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.Timer;

public class SuperPanel extends JPanel implements ActionListener{

        JFrame frame;
        JFrame frame2;
        JLabel nazwa;
        Timer mainTimer;
    public static final int HEIGHT = 550;
    public static final int WIDTH = 1050;
        int i;
        int w=-100;
        int h=-50;
        ArrayList<SuperMiasto> miasta = new ArrayList<SuperMiasto>();      

   private JButton heroButton;
   private JButton cywilButton;


    public SuperPanel(JFrame frame) {
        mainTimer = new Timer(10,this);
               heroButton = new HeroButton(this);
               cywilButton = new CywilButton(this);
              frame2 = new JFrame();
               nazwa = new JLabel();




        setLayout(null);
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setBackground(Color.GREEN);               

               for(i=0;i<1;i++)
                {
         //  i=0;
                    miasta.add( new SuperMiasto() );  

                   miasta.get(i).setNazwa("Radom");
                   miasta.get(i).nazwalabel = new JLabel();
                    nazwa.setText("Nazwa:");
                    nazwa.setBounds(0,0,50,20); 
                    miasta.get(i).nazwalabel.setText(miasta.get(i).getNazwa());
                    miasta.get(i).nazwalabel.setBounds(51,0,50,20);
                    miasta.get(i).x=w;
                    miasta.get(i).y=h;
                    miasta.get(i).imagelabel = new JLabel(miasta.get(i).image);
                    miasta.get(i).imagelabel.setBounds(miasta.get(i).x,miasta.get(i).y,miasta.get(i).image.getIconWidth(),miasta.get(i).image.getIconHeight());
                    add(miasta.get(i).imagelabel);
                    miasta.get(i).imagelabel.addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {   
                        miasta.get(i).cityframe = new JFrame();
                       miasta.get(i).cityframe.setLayout(null);
                        miasta.get(i).cityframe.setSize(300,300); 
                       miasta.get(i).cityframe.add(nazwa);
                        miasta.get(i).cityframe.add(miasta.get(i).nazwalabel);                       
                        miasta.get(i).cityframe.setVisible(true);                                       
                    }
                    });

                    w=w+200;
                    if (w > WIDTH-200)
                    {
                        h=h+200;
                        w=-100;
                    }

                }

    }
        @Override
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
           add(heroButton); 
           add(cywilButton); 

    }   
      public void actionPerformed(ActionEvent e) {
            repaint();            
    }
}

我是java新手,我不知道这些错误意味着什么。这是因为当我将循环更改为
i=0时它工作完全正确。我不知道那错误是什么原因。请帮助。

哪一行导致了您的错误?而且永远不要从paint或paint Component方法中添加组件。这些方法只用于绘图和绘图。@JonSkeet:这不是NullPointerException。更确切地说,这是一个AIOOBE。当我点击图像时,错误就会出现。我认为是循环造成的,因为没有循环,只有一个物体,效果很好。我应该用什么来代替paintComponent方法呢?我不知道你想用你的代码做什么。但是,paintComponent永远不应该用于您使用它的目的。您是javascript程序员吗?知道这最终会让事情更容易解释。。。我对发生在第60行而不是第63行的错误非常怀疑(现在你在那里做什么是个好主意,无论如何都应该引起警告)。请再次验证(在设置了错误的标题之后…)?
package superworld;

import javax.swing.*;

public class SuperMiasto {
    private String nazwa;
    private int liczba_mieszkańców;
    private int liczba_mocy;
    ImageIcon image = new ImageIcon("C:/Users/Zuzanna Sawala/Moje dokumenty/NetBeansProjects/SuperWorld/miasto.png");
   int x,y;
    JLabel imagelabel;
    JFrame cityframe;
    JLabel nazwalabel;
   // int x,y;
   /* SuperMiasto(int x,int y){

    }*/
    /*Gettery i settery*/
    String getNazwa(){
        return nazwa;
    }
    void setNazwa(String nazwa){
        this.nazwa=nazwa;
    }
    int getLiczba_mieszkańcow(){
        return liczba_mieszkańców;
    }
    void setLiczba_mieszkańcow(int liczba_mieszkańców){
        this.liczba_mieszkańców=liczba_mieszkańców;
    }
    int getLiczba_Mocy(){
        return liczba_mocy;
    }
}