这是代码:
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未初始化。但是如何初始化抽象类呢?
答案 0 :(得分:13)
这里有两个问题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处理的,它实际上选择了图形上下文,并为我们调用了paint函数。但是,如果你想要,你可以传入你想要的任何图形对象,并要求它绘制它。 (所以如果你想将你的组件绘制到图像上,你可以这样做)
(注意,我将类名从anim1更改为So1)
答案 1 :(得分:1)
applet不需要像常规Java应用程序那样的main方法。我建议从Sun's Applets Tutorial开始。特别是,您可能希望跳到Life Cycle of an Applet部分,以了解如何在applet中处理Graphics对象。
答案 2 :(得分:1)
您需要做的只是删除主要方法,如下所示:
import java.awt.*;
import java.applet.*;
public class anim1 extends Applet {
public void paint (Graphics g) {
g.drawString("Hello",100,100);
}
}
答案 3 :(得分:0)
您应该在paint方法中操作组件的图形并调用repaint()或update(),而不是直接调用paint方法。
开始here以获取更多信息。
答案 4 :(得分:0)
而不是调用paint(Graphics g),您需要调用repaint或update方法。但为此,您的类必须属于java.awt.Container中的层次结构。
对于您的班级,您已经覆盖了Paint方法,并且您正在尝试调用paint方法。您需要调用repaint或update方法(如果您的类位于java.awt.Container的层次结构中)而不是paint,而java的事件调度系统会调用您重写的paint方法本身。
答案 5 :(得分:0)
你没有初始化Graphics对象。
您可以通过Component#getGraphics()
方法从组件中获取图形对象。
在您的特定情况下,我认为repaint()
就是您所需要的!
答案 6 :(得分:0)
你没有,你使用getGraphics,但是,如果你真的想要初始化它,那么输入new Graphics(){};并且尽情享受所有抽象方法。大多数情况下只需要将代码放在paint(g)中就可以了,你需要记住将applet设置为可见,通常,它应该是构造函数中的最后一行,甚至在它之外,我曾经犯过一次错误变得可见,然后初始化了一堆变量,它显示了一段黑屏。