当前位置: 代码迷 >> Java相关 >> 请教空指针异常。
  详细解决方案

请教空指针异常。

热度:138   发布时间:2007-05-08 16:57:39.0
请教空指针异常。

import java.applet.*;
import java.awt.*;
public class ShowAnimator extends Applet //shows Exception
{
Image [] m_Images;
int totalImages=14;
int currentImage=0;
public void init()
{
m_Images=new Image[totalImages];
for(int i=0;i<totalImages;i++)
{
m_Images[i]=getImage(getCodeBase(),"images\\img00"+(i+1)+".gif");
}
}
public void start()
{
currentImage=0;
}
public void paint(Graphics g)
{
g.drawImage(m_Images[currentImage],50,50,this);
currentImage=++currentImage%totalImages;
try
{
Thread.sleep(50);
}
catch(Exception e)
{
}
repaint();
}
public static void main(String [] args)
{
Frame f=new Frame("DrawImages");
ShowAnimator s=new ShowAnimator();
f.add(s);
s.init();
f.setSize(200,100);
f.setVisible(true);
}
}

//<applet code="ShowAnimator.class" width=300 height=300>
//</applet>

错误提示如下:
D:\java\lesson6>java ShowAnimator
Exception in thread "main" java.lang.NullPointerException
at java.applet.Applet.getCodeBase(Unknown Source)
at ShowAnimator.init(ShowAnimator.java:13)
at ShowAnimator.main(ShowAnimator.java:38)

搜索更多相关的解决方案: 指针  java  import  public  

----------------解决方案--------------------------------------------------------
s.init();好像是默帐整用的。。你在吧Applet好好看看,,
----------------解决方案--------------------------------------------------------
当然它所在的环境不是作为applet运行的时候就会抛出这个异常

你用运行applet的方法来运行它,就不会抛出异常了
----------------解决方案--------------------------------------------------------

问题解决了。

在Applet使用main()函数这个本身没有问题,这是一种编程技巧,使得这个程序既可以

在浏览器和appletviewer中执行,也可以使用java命令直接执行,问题出getCodeBase

( )这个方法,如果你使用appletVeiwer和浏览执行时,getCodeBase()可以正确的获取

Applet class所在的URL,如果你是做为一个独立的应用程序来执行的话,我个人认为

此时的Applet已不再是真正意义上的Applet,所以无法获取URL,当然这是值就会为

NULL,你使用一个为NUll的变量,发生空指针异常就再所难免了!!!


解决方法:

如果是作为一个独立应用程序加载本地图片:
Tookit tk = getTookit(); //这个方法是Applet从java.awt.component继承的,至于Tookit类自己看吧
m_Images[i]=tk.getImage(getClass( ).getResource("images\\img00"+(i+1)+".gif"));
这样应该就没有问题了

如果是作为一Applet来加载网上的图片:

可以使用getCodeBase()来获取了!!!


----------------解决方案--------------------------------------------------------

呵呵,了解了APPLET的运行机制就可以理解了


----------------解决方案--------------------------------------------------------
  相关解决方案