Java只运行代码的一部分

时间:2014-01-03 12:01:27

标签: java awt

我在框架中绘制了两个字符串的简单Java应用程序的一部分。第一个字符串被渲染,但第二个字符串不是。

import java.awt.*;
//Begin troublesome section    
class NewFrame extends Frame {

  public void paint (Graphics g)
  {
    g.drawString ("Foo", 70, 70);
  }

 public void paint2 (Graphics g)
  {
    g.drawString ("Bar", 600, 600);
  }

}
//End troublesome section
public class FooBar {

  public static void main (String[] argv)
  {
    NewFrame nf = new NewFrame ();

    nf.setTitle ("Foo Bar");
    nf.setResizable (true);
    nf.setBackground (Color.cyan);
    nf.setSize (700, 700);

    nf.setVisible (true);
  }
}

有问题的代码部分是所谓的“麻烦部分”。

2 个答案:

答案 0 :(得分:5)

Java自动调用方法paint来绘制窗口。请参阅方法documentation

方法paint2不是标准的,不会自动调用。

要么

public void paint(Graphics g) {
    super.paint(g);
    g.drawString ("Foo", 70, 70);
    g.drawString ("Bar", 600, 600);
}

public void paint(Graphics g) {
    super.paint(g);
    g.drawString ("Foo", 70, 70);
    paint2(g);
}

public void paint2(Graphics g) {
    g.drawString ("Bar", 600, 600);
}

答案 1 :(得分:4)

这并不奇怪:paint由基类函数调用(在Frame中的一个方法的实现中某处:在paint中放置一个断点,然后使用你的调试器,在达到断点时查看调用堆栈),paint2不会被任何东西调用。

为什么不亲自从paint2致电paint?更好的是,将paint2的代码合并到paint。因此,您不会再次陷入这种腌制状态,将@Override 注释添加到paint;不要忘记在父类中调用paint

@Override
public void paint (Graphics g)
{
    super.paint(g); /*your first job is to call the base method*/