想实现这样一个功能:在弹出的窗口中,每隔一段时间,用画笔graphics.drawString()写入一行信息,我在paint()方法里这样写:
public void paint(Graphics g){ int count = 0;
String str = "";
while(count < 100){
str = result.get(count);    //这一行错误
g.drawString(str, infoX, infoY);
count++;
infoY += 5;
}
}
错误如下:
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 MyFrame.paint(MerryMatch.java:195)
麻烦各位,帮忙解答一下这个问题的算法或者思路~

解决方案 »

  1.   

    看楼主的代码 result是一个ArrayList对象 而这个对象的size可能没有100 所以在while循环中result.get(count)语句就抛出了下标越界的错误再看楼主需要的功能"在弹出的窗口中,每隔一段时间,用画笔graphics.drawString()写入一行信息"
    paint方法里面用while循环是不行的 因为paint调用一次不可能把全部的你要写入的信息都写出来解决办法 paint方法只写一次信息 然后把repaint()方法放在线程里面 每隔一段时间就重画楼主明白我的意思吗?
      

  2.   

    我程序里有另一个线程每隔一段时间重画,这样写吗?:
    public void paint(Graphics g){int count = 0;
    String str = "";str =max+" "+maxid;    //俩全局变量
    g.drawString(str, infoX, infoY);infoY += 5;
    }
    结果只重画出一次,两个值都是0,不解。还有个问题就是因为主程序的循环一直在改变这俩变量的值,可能早执行完了,我想想把这俩变量保存到hashMap什么的再取试试吧
      

  3.   

    还有个问题就是因为主程序的循环一直在改变这俩变量的值主线程的执行时间相比于线程重画的时间 是很短的 也许还没来得及重画 就Over了还有这些可能性 是不是线程的run方法写错了? 或者你的线程根本就没start启动?
      

  4.   

    应该就是没来得及重画 run方法就是死循环里repaint 也启动了 因为程序开始frame就画出来了 这时候变量还是0 就只显示一行 
      

  5.   

    这样写报错了,说空指针了
    public void paint(Graphics g){
    int girlId = count;
    int boyId = result.get(girlId);  //这一行报错了
    g.drawString(girlId+"选择了"+boyId, infoX, infoY);
    infoY += 5;
    count++;
    }
      

  6.   

    这样写报错了,说空指针了
    public void paint(Graphics g){
    int girlId = count;
    int boyId = result.get(girlId);  //这一行报错了
    g.drawString(girlId+"选择了"+boyId, infoX, infoY);
    infoY += 5;
    count++;
    }在调用result.get(girlId)方法之前result是不是为空 也就是你没初始化?