急急急~紧急求助一个问题!

isaac198518 2013-07-20 11:53:30
想实现这样一个功能:在弹出的窗口中,每隔一段时间,用画笔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)
麻烦各位,帮忙解答一下这个问题的算法或者思路~
...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
isaac198518 2013-07-21
  • 打赏
  • 举报
回复
引用 1 楼 wuyanxue 的回复:
看楼主的代码 result是一个ArrayList对象 而这个对象的size可能没有100 所以在while循环中result.get(count)语句就抛出了下标越界的错误 再看楼主需要的功能"在弹出的窗口中,每隔一段时间,用画笔graphics.drawString()写入一行信息" paint方法里面用while循环是不行的 因为paint调用一次不可能把全部的你要写入的信息都写出来 解决办法 paint方法只写一次信息 然后把repaint()方法放在线程里面 每隔一段时间就重画 楼主明白我的意思吗?
我程序里有另一个线程每隔一段时间重画,这样写吗?: public void paint(Graphics g){ int count = 0; String str = ""; str =max+" "+maxid; //俩全局变量 g.drawString(str, infoX, infoY); infoY += 5; } 结果只重画出一次,两个值都是0,不解。还有个问题就是因为主程序的循环一直在改变这俩变量的值,可能早执行完了,我想想把这俩变量保存到hashMap什么的再取试试吧
摆烂办不到 2013-07-21
  • 打赏
  • 举报
回复
引用 5 楼 isaac198518 的回复:
[quote=引用 3 楼 wuyanxue 的回复:] 还有个问题就是因为主程序的循环一直在改变这俩变量的值 主线程的执行时间相比于线程重画的时间 是很短的 也许还没来得及重画 就Over了 还有这些可能性 是不是线程的run方法写错了? 或者你的线程根本就没start启动?
这样写报错了,说空指针了 public void paint(Graphics g){ int girlId = count; int boyId = result.get(girlId); //这一行报错了 g.drawString(girlId+"选择了"+boyId, infoX, infoY); infoY += 5; count++; }[/quote] 在调用result.get(girlId)方法之前result是不是为空 也就是你没初始化?
摆烂办不到 2013-07-21
  • 打赏
  • 举报
回复
看楼主的代码 result是一个ArrayList对象 而这个对象的size可能没有100 所以在while循环中result.get(count)语句就抛出了下标越界的错误 再看楼主需要的功能"在弹出的窗口中,每隔一段时间,用画笔graphics.drawString()写入一行信息" paint方法里面用while循环是不行的 因为paint调用一次不可能把全部的你要写入的信息都写出来 解决办法 paint方法只写一次信息 然后把repaint()方法放在线程里面 每隔一段时间就重画 楼主明白我的意思吗?
isaac198518 2013-07-21
  • 打赏
  • 举报
回复
引用 3 楼 wuyanxue 的回复:
还有个问题就是因为主程序的循环一直在改变这俩变量的值 主线程的执行时间相比于线程重画的时间 是很短的 也许还没来得及重画 就Over了 还有这些可能性 是不是线程的run方法写错了? 或者你的线程根本就没start启动?
这样写报错了,说空指针了 public void paint(Graphics g){ int girlId = count; int boyId = result.get(girlId); //这一行报错了 g.drawString(girlId+"选择了"+boyId, infoX, infoY); infoY += 5; count++; }
isaac198518 2013-07-21
  • 打赏
  • 举报
回复
引用 3 楼 wuyanxue 的回复:
还有个问题就是因为主程序的循环一直在改变这俩变量的值 主线程的执行时间相比于线程重画的时间 是很短的 也许还没来得及重画 就Over了 还有这些可能性 是不是线程的run方法写错了? 或者你的线程根本就没start启动?
应该就是没来得及重画 run方法就是死循环里repaint 也启动了 因为程序开始frame就画出来了 这时候变量还是0 就只显示一行
摆烂办不到 2013-07-21
  • 打赏
  • 举报
回复
还有个问题就是因为主程序的循环一直在改变这俩变量的值 主线程的执行时间相比于线程重画的时间 是很短的 也许还没来得及重画 就Over了 还有这些可能性 是不是线程的run方法写错了? 或者你的线程根本就没start启动?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧