2010-04-19 100 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

相关问题