2010-09-22 29 views
1

我有一個使用NetBeans構建的applet,名爲AKApplet。它運行在IDE很好,但是當我把它放在一個網頁,它拋出以下錯誤:invokeLater上的Java Applet中的NoClassDefFoundError

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這是一個面板。然而,我認爲它沒有那麼遠。

有誰知道可能發生了什麼?在這一點上,小程序已加載,組件可以看到,並已更新等。

回答

0

AKApplet的第二個內部類中是否有任何靜態定義可以拋出任何類型的異常?

在確定類文件存在並位於類路徑中之後,靜態初始化程序中的異常是NoClassDefFoundErrors的最常見原因。

2

確保您部署不僅AKApplet.class,也AKApplet$1.classAKApplet$2.class

1

我想我不明白的$類參考。只有一個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文件。我添加了它們,並且它可以工作。謝謝你的幫助。有人能給我簡要的解釋這些文件是什麼嗎? 正如我所說,我沒有定義內部類...

+0

看看你的編譯輸出,他們應該在那裏。代碼:'new Runnable(){...}'將創建其中的一個。 – kschneid 2010-09-22 18:00:17

+0

啊。我想我錯了。 *有一些內部類,即Runnable()類。現在這一切都有道理。我在applet中調用Runnable()兩次。再次感謝,優秀的迴應。 – jar 2010-09-22 18:05:25