repaint()嵌套中不调用paint()该如何解决

ctrlcv 2008-05-02 06:08:35
整个的hanoi递归调用完成后,只会有一个repaint()(也就是最后一次被调用的repaint())去执行paint()中的语句。

public void hanoi(int n,int a,int b,int c) {
if (n == 1) {
towerhigh[a]--;
towerhigh[c]++;
whichstick[n] = c;
level[n] = towerhigh[c];
repaint();
//outpaint();
// try{Thread.sleep(10);}catch(InterruptedException e){;};
return;
}
hanoi(n - 1, a, c, b);
towerhigh[a]--;
towerhigh[c]++;
whichstick[n] = c;
level[n] = towerhigh[c];
repaint();
//outpaint();
// try{Thread.sleep(10);}catch(InterruptedException e){;};
hanoi(n - 1, b, a, c);
return;
}
}



public void paint(Graphics g){
int i;
g1=g;
g.drawLine(0,120,200,120);
g.drawLine(40,0,40,120);
g.drawLine(100,0,100,120);
g.drawLine(160,0,160,120);
//if (flag==0) {hanoi(5,1,2,3);}
if (flag==1) { otherdraw(g);}
}


...全文
272 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctrlcv 2008-05-04
  • 打赏
  • 举报
回复
我解决了,用paint(super.getGraphics());代替repaint()问题就解决了

应为repaint()只是发送了一个信号量过去,awt/swing的另一个线程(该线程与主线成同步)收到这个信号后才去在调用paint(g),但是由于优先级问题,始终都没有启动,直到hanoi()/actiongperformed()运行完后才去检查是否要有repaint()任务,如果有才会调用paint(g),所以用sleep()是没用的。

于是paint(super.getGraphics())来代替repaint();
lEFTmOON 2008-05-04
  • 打赏
  • 举报
回复
如果是在Applet中出现的这个问题,应该是速度过快,一下显示完了
如果是在Swing中出现的这个问题,请在paintComponment(Graphics g)中写

62,630

社区成员

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

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