import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.*;
public class PushBox extends JFrame{
Hero h;
Wall w;
List<Box> bList = new ArrayList<Box>();
List<Hole> hList = new ArrayList<Hole>();
public PushBox(){
setSize(800,600);
setLocation(100,100);
setVisible(true);
setResizable(false);
h = new Hero(this);
w = new Wall();
for(int i=0;i<=1;i++){
for(int j=0;i<=1;j++){
bList.add(new Box(i*400+185,j*300+135));
}
}

hList.add(new Hole(200,300));
hList.add(new Hole(400,150));
hList.add(new Hole(400,450));
hList.add(new Hole(600,300));

this.addKeyListener(new KeyMonitor());
new DoDraw().start();

}
public void paint(Graphics g){
super.paint(g);
//g.setColor(Color.BLACK);
//g.drawString(hList.size()+"", 200, 300);
//g.drawString(bList.size()+"", 250, 350);
for(int i = 0;i<=3;i++){
bList.get(i).draw(g);
//hList.get(i).draw(g);
}
for(int j=0;j<=3;j++){
hList.get(j).draw(g);
}
h.draw(g);
w.draw(g);
g.drawString(isCoverd()+"hole has been covered", 150, 150);
}
private class KeyMonitor extends KeyAdapter{ public void keyPressed(KeyEvent e) {
h.keyPressed(e);
}
public void keyReleased(KeyEvent e) {
h.keyReleased(e);

}
}
private class DoDraw extends Thread{
public void run(){
while (true){
repaint();
try{
sleep(50);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public int isCoverd(){
int num=0;
for(int i=0;i<=3;i++){
for(int j=0;j<=3;j++){
if(bList.get(i).x==hList.get(j).x && bList.get(i).y==hList.get(j).y){
num++;
}
}
}
return num;
}
public static void main(String[]aegs){
new PushBox();
}}
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at PushBox.paint(PushBox.java:43)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(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 Source)
求解,我的数组没超出边界呀,该有的类也都有

解决方案 »

  1.   

    可能是调用setVisible(true);引起的,调用时JFrame就开始调用子组件的paint()方法了,试一下将setVisible(true);放在最后执行。
    这位仁兄顺便帮我下代码,谢了。
    http://topic.csdn.net/u/20110127/19/2e20800f-27e5-4acd-8fd3-9291607c9c88.html?55694
      

  2.   

    for(int i=0;i<=1;i++){
    for(int j=0;i<=1;j++){
    bList.add(new Box(i*400+185,j*300+135));
    }
    }
    你这里会引起死循环,会导致hList.add(new Hole(200,300));没有执行
    hList里没有数据 hList.get(j)会报错。将第二个循环的i改为j
    for(int i=0;i<=1;i++){
    for(int j=0;i<=1;j++){
    bList.add(new Box(i*400+185,j*300+135));
    }
    }注意细节问题。