原题:创建一个名称为Myapplet的Applet,并为其提供多线程功能。在Applet中输出从1到20的数字,且每个数字间延迟500毫秒。import java.awt.*;
import java.applet.*;public class Myapplet extends Applet implements Runnable
{
Thread t1;
Graphics g1;
Integer i;

public void init()
{
t1=new Thread(this);
t1.start();
}
public void paint(Graphics g)
{
g1=g;
}
public void run()
{
for(i=1;i<=5;i++)
{
String s=Integer.toString(i);
g1.drawString(s,50,50+i*10);
try
{
Thread.sleep(500);
}
catch(InterruptedException e)
{
System.out.println ("stop");
}
}
}
}以上的运行结果总是出现"NullPointerException"异常,无法正确显示。哪位高手能给我一个提示?我先谢了!

解决方案 »

  1.   

    public void paint(Graphics g)
    {
    g1=g;              // 位置 1 
    }
    public void run()
    {
    for(i=1;i<=5;i++)
    {
    String s=Integer.toString(i);
    g1.drawString(s,50,50+i*10); // 位置 2: 这里 g1 还没被赋值就被引用了
      

  2.   

    更改如下://<applet code=Myapplet.class width=400 height=200>
    //</applet>
    //import java.awt.*;
    import java.applet.*;public class Myapplet extends Applet implements Runnable
    {
    Thread t1;
    Graphics g1;
    Integer i;

    public void init()
    {
    t1=new Thread(this);
    t1.start();
    }
    public void paint(Graphics g)
    {
    g1=g;
    }
    public void run()
    {
    for(int i=0;i<=5;i++) // 由于第一次会被paint覆盖,所以从0开始
    {
    String s=Integer.toString(i);
    getGraphics().drawString(s,50,50+i*10); 
    try
    {
    Thread.sleep(500);
    }
    catch(InterruptedException e)
    {
    System.out.println ("stop");
    }
    }
    }
    }
    运行:
    F:\>javac Myapplet.java
    F:\>appletviewer Myapplet.java