public class Test extends Frame{@Override
public void paint(Graphics g) {
System.out.println("paint");
}@Override
public void update(Graphics g) {
System.out.println("update");
paint(g);
}public static void main(String[]args){
new Test().repaint();
}}
代码如上;结果是什么也没打印。不是说repaint调用update,update调用paint吗?

解决方案 »

  1.   

    我到1.7的src文档里看了确实repaint没有调用paint和update,不知何解
      

  2.   


    import java.awt.Frame;
    import java.awt.Graphics;
    public class Test extends Frame {  @Override
      public void paint(Graphics g) {
        System.out.println("paint");
      }  @Override
      public void update(Graphics g) {
        System.out.println("update");
        paint(g);
      }  public static void main(String[] args) {
        
        Test t = new Test();
        t.setVisible(true);
        t.repaint();
      }
    }
      

  3.   

    为什么不 setVisible(true),就没有调用 paint() ?因为 repaint(); 对 paint(); 的调用,不是同步调用(synchronized call)repaint(); 只是产生了一个内部的“重绘事件”,然后把这个事件递交给了 EDT, 排到这个事件的时候 EDT 一检查,发现事件要求重绘的 Frame 根本没在屏幕上显示,没显示那也就无所谓重绘了,也就不用去调用 paint() 了~