我有一个Applet类,并且想使其作为应用程序运行,所以我写了以下代码:

public static void main(String args[]) {
JFrame app = new JFrame("Applet Container");
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(200, 100);
Hangman applet = new Hangman();
applet.init();
app.setLayout(new BorderLayout());
app.setSize(500,500);
app.getContentPane().add(applet, BorderLayout.CENTER);
app.setVisible(true);
}

注意:Hangman是applet类。如果我运行它,它可以正常工作,但是我要做的是使它作为应用程序运行。

当我运行上面的main时,出现以下错误:
Exception in thread "main" java.lang.NullPointerException
at java.applet.Applet.getCodeBase(Applet.java:152)
at Me.Hangman.init(Hangman.java:138)
at Me.Client.main(Client.java:54)
Java Result: 1

此错误来自Hangman类中的这一行:
danceMusic = getAudioClip(getCodeBase(), "../../audio/dance.au");

GetCodeBase()方法返回null,我需要如何使该方法正常工作的帮助,或者可能需要用另一个可以访问我的文件来获取资源的方法来代替它?

先感谢您

最佳答案

小程序具有特殊的运行时环境。如果希望代码也作为应用程序运行,则不能依赖该环境提供的任何功能。

显然,您在此处使用的是 Applet 特定的函数。您必须搜索如何在应用程序中完成此操作,然后检测正在运行的环境并使用适当的方法。

编辑:

而不是getCodeBase()我会尝试:

getClass().getProtectionDomain().getCodeSource().getLocation();

但是getAudioClip也已在applet中定义,因此也是不可行的。不必使用java.applet.AudioClip,而必须使用javax.sound.sampled API。

10-04 11:18
查看更多