5

这是代码:

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("",400,300);
    }

    public static void main(String ad[])
    {
        anim1 a=new anim1();
        Graphics g1;
        a.paint(g1);
    }
}

它说 g1 没有初始化。但是如何初始化一个抽象类呢?

4

7 回答 7

15

那么这里有两个问题1:

    Graphics g1;
    a.paint(g1);

而且您收到 G1 未初始化的错误。这是因为变量 g1 从未设置为任何值,这会导致编译错误。要编译代码,您至少需要这样做:

    Graphics g1 = null;
    a.paint(g1);

但是,这显然不会对您有太大帮助。当您尝试运行代码时,您将收到 NullPointerException。为了真正使您的图形绘制,您需要这样做:

    anim1 a=new anim1();
    Graphics g1 = anim1.getGraphics();
    a.paint(g1);

但是,这仍然行不通,因为 Anim1 不会出现在屏幕上。要让它出现在屏幕上,您需要以下内容:

import java.awt.*;
import javax.swing.*;
import java.applet.*;

public class So1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("hello",40,30);
    }

    public static void main(String ad[])
    {

        JFrame jp1 = new JFrame();
        So1 a=new So1 ();
        jp1.getContentPane().add(a, BorderLayout.CENTER);
        jp1.setSize(new Dimension(500,500));
        jp1.setVisible(true);

    }
}

现在请注意,我们实际上并没有自己调用paint() 函数。这由 awt 处理,它实际上选择图形上下文,并为我们调用我们的绘制函数。不过,如果你愿意,你可以传入任何你想要的图形对象,并要求它在上面绘制。(因此,如果您想将组件绘制到图像上,可以这样做)

(注意,我将类名从 anim1 更改为 So1)

于 2009-12-27T11:21:38.243 回答
1

applet 不需要像常规 Java 应用程序那样的 main 方法。我建议从Sun 的 Applets Tutorial开始。特别是,您可能希望跳到 Applet 的生命周期部分,了解如何在 Applet 中处理 Graphics 对象。

于 2009-12-27T06:38:14.973 回答
1

您需要做的只是删除 main 方法,如下所示:

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet {

    public void paint (Graphics g) {
        g.drawString("Hello",100,100);
    }
}
于 2012-09-27T00:54:42.243 回答
0

您应该在paint 方法中操作组件的图形并调用repaint() 或update(),而不是直接调用paint 方法。

从这里开始了解更多信息。

于 2009-12-27T06:28:38.317 回答
0

您需要调用 repaint 或 update 方法,而不是调用paint(Graphics g)。但是为此,您的类必须属于 java.awt.Container 中的层次结构。

对于您的类,您已经覆盖了 Paint 方法,并且主要是您尝试调用 paint 方法。您需要调用 repaint 或 update 方法(如果您的类在 java.awt.Container 的层次结构中)而不是绘制,并且 java 的事件调度系统调用您覆盖的绘制方法本身。

于 2009-12-27T06:38:38.060 回答
0

您不初始化 Graphics 对象。

Component#getGraphics()您可以通过方法从组件中获取图形对象。

在你的特殊情况下,我认为这repaint()就是你所需要的!

于 2009-12-27T06:41:22.110 回答
0

你没有,你使用 getGraphics,但是,如果你真的想初始化它,那么输入 new Graphics(){}; 并享受填充所有抽象方法的乐趣。大多数时候,只需将代码放入paint(g) 就可以了,您需要记住将您的小程序设置为可见,通常,它应该是构造函数中的最后一行,甚至在它之外,我曾经在哪里犯过错误使其可见,然后初始化一堆变量,它显示了一段时间的黑屏。

于 2017-08-31T03:19:52.823 回答