整个的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);}            
    }

解决方案 »

  1.   

    如果是在Applet中出现的这个问题,应该是速度过快,一下显示完了
    如果是在Swing中出现的这个问题,请在paintComponment(Graphics g)中写
      

  2.   

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