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)
----------------解决方案--------------------------------------------------------
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的运行机制就可以理解了
----------------解决方案--------------------------------------------------------