我有一个使用NetBeans构建的applet,名为AKApplet。它在IDE中运行良好,但是当我将它放在网页中时,它会抛出以下错误:
Exception in thread "Thread-15" java.lang.NoClassDefFoundError: AKApplet$2
at AKApplet.run(AKApplet.java:675)
applet使用run()方法在后台加载一些数据,同时保持UI响应。很标准的东西。在第675行,加载数据后,我正在尝试使用invokeLater()
更新UI组件:
public void run() {
// ... data loads ...
// line 675:
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
userMessages.setText("Data loaded.");
panelList.setVisible(true);
validate();
}
});
}
我要更新的组件是userMessages
,JLabel和panelList
是Panel。我不认为它会走得那么远。
有谁知道可能会发生什么?此时applet已加载,组件可以看到并且已经更新等等。
答案 0 :(得分:2)
确保您不仅要部署AKApplet.class
,还要部署AKApplet$1.class
,AKApplet$2.class
等。
答案 1 :(得分:1)
我想我不明白$ classes所指的是什么。只有一个AKApplet类,没有内部类。也没有静态定义。
我确实定义了另外两个类,但它们是单独的类:
class ThreadFlags { /*...*/ }
class DeleteButton extends JLabel { /*...*/ }
另外,我已经验证它们位于根级别的AKApplet.jar文件中:
META-INF/MANIFEST.MF
META-INF/AKAPPLET.SF
META-INF/AKAPPLET.DSA
META-INF/
AKApplet.class
DeleteButton.class
ThreadFlags.class
更新:好的,我在NetBeans项目的/ build / classes /目录中找到了AKApplet $ .class文件。我添加了它们,它的工作原理。谢谢你的帮助。有人能给我一个简短的解释,说明这些文件是什么? 正如我所说,我没有定义内部类......
答案 2 :(得分:0)
AKApplet的第二个内部类中是否存在可能引发任何异常的静态定义?
在确保类文件存在且位于类路径之后,静态初始化程序中的异常是NoClassDefFoundErrors的最常见原因。