2010-04-19 95 views
0

我有一個簽名的applet,它將文本文件寫入客戶端工作站中的指定目錄。AWT EventQueue空指針異常

當我第一次在Web瀏覽器中加載小程序時,沒有任何問題。它設法加載瀏覽器並將數據寫入文本文件。但是當我繼續加載它時,它不會加載。我看到的只是Java加載映像。即使在等待10分鐘後,小程序仍然不會加載。

不幸的是,這不會一直髮生。我試過關閉網頁瀏覽器並清除所有的緩存和臨時文件,但有時會再次發生。

客戶端工作站安裝了JRE 1.6.0_16,並且在IE8上測試的Windows XP上運行。

下面是HTML頁面中的Applet標記代碼。

<applet code="com.applet.files.PrintTkt.class" archive="<%=BaseURL %>/UT/SPrintTkt.jar" width="500" height="450"> 
    <param NAME="ROOT" value="<%= BaseURL %>"> 
    <param NAME="CHARSET" value="<%= charset %>"> 
    <param NAME="batfile" value="<%= batfile %>"> 
    <param NAME="filename" value="<%= filename %>"> 
    <param NAME="PAGE_ID" value="PrintTkt"> 
</applet> 

下面是來自Java控制檯的堆棧跟蹤。下面的例外情況僅在我刷新頁面,轉到其他頁面或從我們的Web應用程序註銷時纔會引發。在此之前,堆棧跟蹤僅顯示Applet正在加載。

basic: Loading Java Applet ... 
basic: Applet initialized 
basic: Removed progress listener: [email protected] 
basic: Applet made visible 
basic: Starting applet 
basic: completed perf rollup 
basic: Applet started 
basic: Told clients applet is started 
Exception in thread "AWT-EventQueue-6" java.lang.NullPointerException 
    at java.awt.LightweightDispatcher$3.run(Unknown Source) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-6" java.lang.NullPointerException 
    at java.awt.LightweightDispatcher$3.run(Unknown Source) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-6" java.lang.NullPointerException 
    at java.awt.LightweightDispatcher$3.run(Unknown Source) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

注:6u20是Java SE的當前安全版本。 – 2010-04-19 13:59:28

回答

0

我以前遇到過這個變種。當包含applet的頁面被重新加載時,它可以重用類加載器,只要它沒有被最終確定。發生這種情況時,已經由該類加載器加載的類不會重新加載。這可能會導致靜態成員一些討厭的問題。該類已經加載,所以class-statics不會重新初始化。而且,你最終得到一個不爲null的靜態類,但它所保存的值不再有效。

檢查靜態成員的代碼並消除可能的情況。如果無法消除它們,請將掛鉤添加到小程序stop方法以將靜態值設置爲null。

+0

對於遲到的回覆感到抱歉。我已經嘗試了許多事情,似乎我沒有看到它再次發生。 不幸的是,我們的代碼沒有你提到的靜態方法。 以下是我所做的事情: a)添加屬性「id」,「name」和「classloader_cache」,其值設置爲「false」。 b)這個applet連接到一個servlet。在servlet中,我刪除了全局變量。 c)每次我關閉瀏覽器,只有我看到NullPointerExceptions拋出日誌文件。我更改了代碼來處理NullPointerException – 2010-05-09 13:01:52

相關問題