I have been tasked with updating our ancient Java applet from applet tags to object tags, since applet tags have been deprecated for some time now. The applet must work as far back as earlier Java 1.6 versions, on browsers going back to IE6. I made the following object tags to handle this, switching them out based on if the user is using IE or not. The statements in <% %>'s are evaluating fine and just fill in jar files etc.

<% If userIsIE > 0 Then %>
        <object type="application/x-java-applet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" height="0" width="0"> 
            <param name="code" value="<% =MainClass %>" />
            <param name="archive" value="<% =Archives %>" />
            <param name="persistState" value="false" />
        </object>
        <% Else %>
        <object classid="java:<% =MainClass %>" type="application/x-java-applet" archive="<% =Archives %>" height="0" width="0">
            <param name="code" value="<% =MainClass %>" />
            <param name="archive" value="<% =Archives %>" />
            <param name="persistState" value="false" />
        </object>
<% End If %>

It works in every browser I've tried it in, and all versions of Java I've tried it in, except one specific case my coworker found: Running IE9 with Java 1.6.0_20 (And possibly a few other older versions, unconfirmed) causes the page to crash, leaving this on my desktop:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d413f5f, pid=2444, tid=4660
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [jp2iexp.dll+0x3f5f]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0x00b09000):  JavaThread "main" [_thread_in_native, id=4660, stack(0x027c0000,0x029c0000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

Registers:
EAX=0x00000000, EBX=0x3420a218, ECX=0x0041f5e0, EDX=0x029bd5bc
ESP=0x029bd598, EBP=0x029bd5a8, ESI=0x00000000, EDI=0x00b09000
EIP=0x6d413f5f, EFLAGS=0x00010206

Top of Stack: (sp=0x029bd598)
0x029bd598:   029bd5bc 029bd5a4 3420a218 00000000
0x029bd5a8:   029bd5e8 05e89f47 00b09110 029bd5f0
0x029bd5b8:   00442258 00000000 00b096ac fffffffe
0x029bd5c8:   029bd5c8 3420a218 029bd5fc 34213020
0x029bd5d8:   00000000 3420a218 00000000 029bd5f8
0x029bd5e8:   029bd624 05e82f07 34212a30 05e88286
0x029bd5f8:   00442258 00000000 32298a58 029bd604
0x029bd608:   3420a187 029bd62c 34213020 00000000 

Instructions: (pc=0x6d413f5f)
0x6d413f4f:   33 f6 85 c0 7c 3a 8b 45 fc 8d 55 14 52 89 75 14
0x6d413f5f:   8b 08 50 ff 91 a0 00 00 00 85 c0 7c 1a 8b 75 14 


Stack: [0x027c0000,0x029c0000],  sp=0x029bd598,  free space=7f5029bd0cck
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [jp2iexp.dll+0x3f5f]
j  sun.plugin2.main.server.IExplorerPlugin.getDocumentBase0(J)Ljava/lang/String;+0
j  sun.plugin2.main.server.IExplorerPlugin.getDocumentBase()Ljava/lang/String;+31
j  sun.plugin2.main.server.JVMInstance.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZIZZ)Z+14
j  sun.plugin2.main.server.JVMManager.startAppletImpl(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZLjava/lang/String;ZIZ)Lsun/plugin2/main/server/AppletID;+240
j  sun.plugin2.main.server.JVMManager.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZLjava/lang/String;)Lsun/plugin2/main/server/AppletID;+16
j  sun.plugin2.main.server.JVMManager.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZ)Lsun/plugin2/main/server/AppletID;+19
j  sun.plugin2.main.server.IExplorerPlugin.maybeStartApplet()V+192
j  sun.plugin2.main.server.IExplorerPlugin.access$200(Lsun/plugin2/main/server/IExplorerPlugin;)V+1
j  sun.plugin2.main.server.IExplorerPlugin$BackgroundStarter$1.run()V+7
v  ~StubRoutines::call_stub
V  [jvm.dll+0xf049c]
V  [jvm.dll+0x17fcf1]
V  [jvm.dll+0xf051d]
V  [jvm.dll+0xf9e0f]
V  [jvm.dll+0xfcc07]
C  [jp2iexp.dll+0x17a5]
C  [jp2iexp.dll+0x853b]
C  [jp2iexp.dll+0x7a32]
C  [USER32.dll+0x1fd72]
C  [USER32.dll+0x1fe4a]
C  [USER32.dll+0x2018d]
C  [USER32.dll+0x2022b]
C  [IEFRAME.dll+0xf1c24]
C  [IEFRAME.dll+0x111afe]
C  [iertutil.dll+0x1416c0]
C  [IEFRAME.dll+0xffe3b]
C  [kernel32.dll+0x4d0e9]
C  [ntdll.dll+0x41603]
C  [ntdll.dll+0x415d6]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.plugin2.main.server.IExplorerPlugin.getDocumentBase0(J)Ljava/lang/String;+0
j  sun.plugin2.main.server.IExplorerPlugin.getDocumentBase()Ljava/lang/String;+31
j  sun.plugin2.main.server.JVMInstance.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZIZZ)Z+14
j  sun.plugin2.main.server.JVMManager.startAppletImpl(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZLjava/lang/String;ZIZ)Lsun/plugin2/main/server/AppletID;+240
j  sun.plugin2.main.server.JVMManager.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZLjava/lang/String;)Lsun/plugin2/main/server/AppletID;+16
j  sun.plugin2.main.server.JVMManager.startApplet(Ljava/util/Map;Lsun/plugin2/main/server/Plugin;JJZ)Lsun/plugin2/main/server/AppletID;+19
j  sun.plugin2.main.server.IExplorerPlugin.maybeStartApplet()V+192
j  sun.plugin2.main.server.IExplorerPlugin.access$200(Lsun/plugin2/main/server/IExplorerPlugin;)V+1
j  sun.plugin2.main.server.IExplorerPlugin$BackgroundStarter$1.run()V+7
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x056d0400 JavaThread "JRE 1.6.0.20 Heartbeat Thread" [_thread_blocked, id=5860, stack(0x085d0000,0x086d0000)]
  0x056dc000 JavaThread "JRE 1.6.0.20 Worker Thread" [_thread_blocked, id=3760, stack(0x09580000,0x09680000)]
  0x056db800 JavaThread "JRE 1.6.0.20 Output Reader Thread" [_thread_in_native, id=3828, stack(0x09390000,0x09490000)]
  0x056db400 JavaThread "JRE 1.6.0.20 Output Reader Thread" [_thread_in_native, id=5472, stack(0x09120000,0x09220000)]
  0x056d9c00 JavaThread "Thread-0" [_thread_in_native, id=3572, stack(0x08d10000,0x08e10000)]
  0x056d8400 JavaThread "Java Plug-In Pipe Worker Thread (Server-Side)" daemon [_thread_in_native, id=3944, stack(0x08f10000,0x09010000)]
  0x05668800 JavaThread "traceMsgQueueThread" daemon [_thread_blocked, id=3620, stack(0x08ab0000,0x08bb0000)]
  0x05640000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=6092, stack(0x08940000,0x08a40000)]
  0x0563b800 JavaThread "CompilerThread0" daemon [_thread_blocked, id=2788, stack(0x086d0000,0x087d0000)]
  0x05639400 JavaThread "Attach Listener" daemon [_thread_blocked, id=3728, stack(0x08060000,0x08160000)]
  0x05637400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2912, stack(0x084c0000,0x085c0000)]
  0x0562f800 JavaThread "Finalizer" daemon [_thread_blocked, id=4596, stack(0x082d0000,0x083d0000)]
  0x0562e400 JavaThread "Reference Handler" daemon [_thread_blocked, id=4676, stack(0x08160000,0x08260000)]
=>0x00b09000 JavaThread "main" [_thread_in_native, id=4660, stack(0x027c0000,0x029c0000)]

Other Threads:
  0x0562c000 VMThread [stack: 0x07f50000,0x08050000] [id=4684]
  0x05647000 WatcherThread [stack: 0x08840000,0x08940000] [id=760]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 4928K, used 1321K [0x32200000, 0x32750000, 0x32ca0000)
  eden space 4416K,  29% used [0x32200000, 0x3234a460, 0x32650000)
  from space 512K,   0% used [0x32650000, 0x32650000, 0x326d0000)
  to   space 512K,   0% used [0x326d0000, 0x326d0000, 0x32750000)
 tenured generation   total 10944K, used 0K [0x32ca0000, 0x33750000, 0x34200000)
   the space 10944K,   0% used [0x32ca0000, 0x32ca0000, 0x32ca0200, 0x33750000)
 compacting perm gen  total 12288K, used 705K [0x34200000, 0x34e00000, 0x38200000)
   the space 12288K,   5% used [0x34200000, 0x342b05f8, 0x342b0600, 0x34e00000)
    ro space 10240K,  51% used [0x38200000, 0x3872ae00, 0x3872ae00, 0x38c00000)
    rw space 12288K,  54% used [0x38c00000, 0x392972d8, 0x39297400, 0x39800000)

Dynamic libraries:
0x01100000 - 0x011b8000     C:\Program Files\Internet Explorer\iexplore.exe
0x77910000 - 0x77a38000     C:\Windows\system32\ntdll.dll
0x77650000 - 0x7772c000     C:\Windows\system32\kernel32.dll
0x77730000 - 0x777f6000     C:\Windows\system32\ADVAPI32.dll
0x77aa0000 - 0x77b63000     C:\Windows\system32\RPCRT4.dll
0x77870000 - 0x7790d000     C:\Windows\system32\USER32.dll
0x77800000 - 0x7784b000     C:\Windows\system32\GDI32.dll
0x760f0000 - 0x7619a000     C:\Windows\system32\msvcrt.dll
0x77490000 - 0x774e9000     C:\Windows\system32\SHLWAPI.dll
0x761d0000 - 0x76ce1000     C:\Windows\system32\SHELL32.dll
0x76f40000 - 0x77085000     C:\Windows\system32\ole32.dll
0x75fd0000 - 0x760e1000     C:\Windows\system32\urlmon.dll
0x774f0000 - 0x7757d000     C:\Windows\system32\OLEAUT32.dll
0x77120000 - 0x772d8000     C:\Windows\system32\iertutil.dll
0x77370000 - 0x7748b000     C:\Windows\system32\WININET.dll
0x77a40000 - 0x77a43000     C:\Windows\system32\Normaliz.dll
0x77850000 - 0x7786e000     C:\Windows\system32\IMM32.DLL
0x77580000 - 0x77648000     C:\Windows\system32\MSCTF.dll
0x77110000 - 0x77119000     C:\Windows\system32\LPK.DLL
0x77090000 - 0x7710d000     C:\Windows\system32\USP10.dll
0x74a90000 - 0x74c2e000     C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6002.18305_none_5cb72f2a088b0ed3\comctl32.dll
0x6d630000 - 0x6df76000     C:\Windows\system32\IEFRAME.dll
0x75fc0000 - 0x75fc7000     C:\Windows\system32\PSAPI.DLL
0x74350000 - 0x7438e000     C:\Windows\system32\OLEACC.dll
0x76d20000 - 0x76d93000     C:\Windows\system32\comdlg32.dll
0x71ac0000 - 0x71af1000     C:\Program Files\Internet Explorer\IEShims.dll
0x75e60000 - 0x75e74000     C:\Windows\system32\Secur32.dll
0x76cf0000 - 0x76d1d000     C:\Windows\system32\WS2_32.dll
0x76da0000 - 0x76da6000     C:\Windows\system32\NSI.dll
0x75830000 - 0x75849000     C:\Windows\system32\iphlpapi.dll
0x757f0000 - 0x75825000     C:\Windows\system32\dhcpcsvc.DLL
0x75a70000 - 0x75a9c000     C:\Windows\system32\DNSAPI.dll
0x757e0000 - 0x757e7000     C:\Windows\system32\WINNSI.DLL
0x757b0000 - 0x757d2000     C:\Windows\system32\dhcpcsvc6.DLL
0x6c5a0000 - 0x6d15b000     C:\Windows\system32\MSHTML.dll
0x752c0000 - 0x752c8000     C:\Windows\system32\VERSION.dll
0x75370000 - 0x753ab000     C:\Windows\system32\rsaenh.dll
0x772e0000 - 0x77364000     C:\Windows\system32\CLBCatQ.DLL
0x714a0000 - 0x714d2000     C:\Program Files\Internet Explorer\ieproxy.dll
0x71e60000 - 0x71eb3000     C:\Windows\system32\ACTXPRXY.DLL
0x75e00000 - 0x75e2c000     C:\Windows\system32\apphelp.dll
0x71aa0000 - 0x71ab1000     C:\Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroIEHelperShim.dll
0x714e0000 - 0x7157b000     C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4016_none_d0893820442e7fe4\MSVCR80.dll
0x715b0000 - 0x71637000     C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4016_none_d0893820442e7fe4\MSVCP80.dll
0x73490000 - 0x734a0000     C:\Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroIEHelper.dll
0x6d440000 - 0x6d44c000     C:\Program Files\Java\jre6\bin\jp2ssv.dll
0x7c340000 - 0x7c396000     C:\Program Files\Java\jre6\bin\MSVCR71.dll
0x75d40000 - 0x75d9f000     C:\Windows\system32\SXS.DLL
0x73c20000 - 0x73c50000     C:\Windows\system32\MLANG.dll
0x74470000 - 0x744ba000     C:\Windows\system32\RASAPI32.dll
0x746e0000 - 0x746f4000     C:\Windows\system32\rasman.dll
0x75cc0000 - 0x75d36000     C:\Windows\system32\NETAPI32.dll
0x74430000 - 0x74461000     C:\Windows\system32\TAPI32.dll
0x74620000 - 0x7462c000     C:\Windows\system32\rtutils.dll
0x74390000 - 0x743c2000     C:\Windows\system32\WINMM.dll
0x75e80000 - 0x75e9e000     C:\Windows\system32\USERENV.dll
0x758d0000 - 0x759c2000     C:\Windows\system32\CRYPT32.dll
0x75a30000 - 0x75a42000     C:\Windows\system32\MSASN1.dll
0x73020000 - 0x73026000     C:\Windows\system32\sensapi.dll
0x75700000 - 0x75707000     C:\Windows\system32\credssp.dll
0x753b0000 - 0x753f7000     C:\Windows\system32\schannel.dll
0x70c60000 - 0x70ccc000     C:\Windows\system32\ieapfltr.dll
0x6f570000 - 0x6f72b000     C:\Windows\System32\jscript9.dll
0x73000000 - 0x7300b000     C:\Windows\system32\msimtf.dll
0x74930000 - 0x749eb000     C:\Windows\system32\PROPSYS.dll
0x71970000 - 0x71a64000     C:\Windows\system32\windowscodecs.dll
0x76db0000 - 0x76f3a000     C:\Windows\system32\setupapi.dll
0x70bb0000 - 0x70c5b000     C:\Windows\system32\d2d1.dll
0x70020000 - 0x70128000     C:\Windows\system32\DWrite.dll
0x70b30000 - 0x70bb0000     C:\Windows\system32\dxgi.dll
0x737f0000 - 0x737fc000     C:\Windows\system32\dwmapi.dll
0x74690000 - 0x746bd000     C:\Windows\system32\WINTRUST.dll
0x761a0000 - 0x761c9000     C:\Windows\system32\imagehlp.dll
0x716b0000 - 0x716dc000     C:\Windows\system32\d3d10_1.dll
0x713f0000 - 0x7142a000     C:\Windows\system32\d3d10_1core.dll
0x6fef0000 - 0x7001c000     C:\Windows\system32\D3D10Warp.dll
0x6f460000 - 0x6f562000     C:\Windows\system32\d3d10.dll
0x70db0000 - 0x70de3000     C:\Windows\system32\d3d10core.dll
0x752f0000 - 0x75311000     C:\Windows\system32\NTMARTA.DLL
0x77a50000 - 0x77a99000     C:\Windows\system32\WLDAP32.dll
0x75a50000 - 0x75a61000     C:\Windows\system32\SAMLIB.dll
0x755f0000 - 0x7562b000     C:\Windows\system32\mswsock.dll
0x751f0000 - 0x751f5000     C:\Windows\System32\wshtcpip.dll
0x752b0000 - 0x752bf000     C:\Windows\system32\NLAapi.dll
0x73440000 - 0x73446000     C:\Windows\system32\rasadhlp.dll
0x70af0000 - 0x70b23000     C:\Windows\system32\windowscodecsext.dll
0x72940000 - 0x72a9b000     C:\Windows\System32\msxml6.dll
0x6d410000 - 0x6d42e000     C:\Program Files\Java\jre6\bin\jp2iexp.dll
0x737d0000 - 0x737d7000     C:\Windows\system32\wsock32.dll
0x732d0000 - 0x732df000     C:\Windows\system32\napinsp.dll
0x732c0000 - 0x732c8000     C:\Windows\System32\winrnr.dll
0x744c0000 - 0x74545000     C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.6002.18305_none_88f3a38569c2c436\comctl32.dll
0x05be0000 - 0x05e77000     C:\PROGRA~1\Java\jre6\bin\client\jvm.dll
0x01fe0000 - 0x01fec000     C:\PROGRA~1\Java\jre6\bin\verify.dll
0x6d330000 - 0x6d34f000     C:\PROGRA~1\Java\jre6\bin\java.dll
0x6d290000 - 0x6d298000     C:\PROGRA~1\Java\jre6\bin\hpi.dll
0x02420000 - 0x0242f000     C:\PROGRA~1\Java\jre6\bin\zip.dll
0x6d430000 - 0x6d436000     C:\Program Files\Java\jre6\bin\jp2native.dll
0x6d1d0000 - 0x6d1e3000     C:\Program Files\Java\jre6\bin\deploy.dll
0x6d610000 - 0x6d623000     C:\Program Files\Java\jre6\bin\net.dll
0x75650000 - 0x75655000     C:\Windows\System32\wship6.dll
0x025b0000 - 0x025b9000     C:\Program Files\Java\jre6\bin\nio.dll
0x02760000 - 0x027a4000     C:\Program Files\Java\jre6\bin\regutils.dll
0x08bb0000 - 0x08cfa000     C:\Program Files\Java\jre6\bin\awt.dll
0x72d30000 - 0x72d72000     C:\Windows\system32\WINSPOOL.DRV

VM Arguments:
jvm_args: -Xbootclasspath/a:C:\PROGRA~1\Java\jre6\lib\deploy.jar;C:\PROGRA~1\Java\jre6\lib\javaws.jar;C:\PROGRA~1\Java\jre6\lib\plugin.jar -Xmx32m -Djava.awt.headless=true -Dkernel.background.download=false -Dkernel.download.dialog=false -XX:MaxDirectMemorySize=64m 
java_command: <unknown>
Launcher Type: generic

Environment Variables:
JAVA_HOME=C:\j2sdk1.4.2_04\
PATH=C:\Program Files\Internet Explorer;;C:\Windows\System32;C:\j2sdk1.4.2_04\bin;C:\Windows\System32\WindowsPowerShell\v1.0\
USERNAME=mlebson
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 30 Stepping 5, GenuineIntel



---------------  S Y S T E M  ---------------

OS: Windows Server 2008 Build 6002 Service Pack 2

CPU:total 4 (8 cores per cpu, 2 threads per core) family 6 model 30 stepping 5, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, ht

Memory: 4k page, physical 4183352k(3147268k free), swap 8613472k(7704200k free)

vm_info: Java HotSpot(TM) Client VM (16.3-b01) for windows-x86 JRE (1.6.0_20-b02), built on Apr 12 2010 13:52:23 by "java_re" with MS VC++ 7.1 (VS2003)

time: Wed Dec 12 14:31:46 2012
elapsed time: 0 seconds

It looks like a null pointer exception in the JVM itself. It still occurs if I get rid of the "IE specific" version I have and just use the second one, after the Else. I've also tried changing the height and width to nonzero values, thinking it might be doing something weird with those, but no. It does not occur if I go back to using applet tags, while keeping all the parameters and settings the same. Now, if I were doing this purely for myself I would just accept it was a bug in an old JVM and require people to upgrade to the latest version of Java (which works fine), but many of our customers are corporate users with very "sticky" IT departments who take ages to roll out updates, or users who don't even know what Java is, let alone know how to update it. Do I just give up and continue using applet tags until browsers outright stop supporting them? Is there a trick to make this work that I haven't tried?

EDIT: I did some more testing, and it looks like the java test page itself (http://www.java.com/en/download/testjava.jsp) also causes the same crash. Maybe I'll just have to use applet tags until all our customers have updated, if it's so bad that the official java test applet can't even load.

有帮助吗?

解决方案

Use deployJava.js to write the applet element. It is designed to ensure the correct element for that browser is written.

其他提示

The issue is in the native C frame and looks like a JDK bug.

A similar bug with JDK 6u 19 and above was reported here.

The fix looks like is to move on to Java 7

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top