InvokeLater()上的Java Applet中的NoClassDefFoundError

时间:2010-09-22 16:36:52

标签: java multithreading applet

我有一个使用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已加载,组件可以看到并且已经更新等等。

3 个答案:

答案 0 :(得分:2)

确保您不仅要部署AKApplet.class,还要部署AKApplet$1.classAKApplet$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的最常见原因。