作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 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 是小程序类。如果我运行它,它工作正常,但我想做的是让它作为应用程序运行。
当我运行上面的主程序时,出现以下错误:
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
也是在小程序中定义的,所以这也是不行的。您必须使用 javax.sound.sampled
API 而不是 java.applet.AudioClip
。
关于java - 如何将小程序作为应用程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174541/
我是一名优秀的程序员,十分优秀!