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;
}
}