title: Need to work around applet crashing JVM in specific circumstances
body: <p>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 &lt;% %>'s are evaluating fine and just fill in jar files etc. </p>
  
  <pre><code>&lt;% If userIsIE &gt; 0 Then %&gt;
          &lt;object type="application/x-java-applet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" height="0" width="0"&gt; 
              &lt;param name="code" value="&lt;% =MainClass %&gt;" /&gt;
              &lt;param name="archive" value="&lt;% =Archives %&gt;" /&gt;
              &lt;param name="persistState" value="false" /&gt;
          &lt;/object&gt;
          &lt;% Else %&gt;
          &lt;object classid="java:&lt;% =MainClass %&gt;" type="application/x-java-applet" archive="&lt;% =Archives %&gt;" height="0" width="0"&gt;
              &lt;param name="code" value="&lt;% =MainClass %&gt;" /&gt;
              &lt;param name="archive" value="&lt;% =Archives %&gt;" /&gt;
              &lt;param name="persistState" value="false" /&gt;
          &lt;/object&gt;
  &lt;% End If %&gt;
  </code></pre>
  
  <p>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:</p>
  
  <pre><code># 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: ( =&gt; 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)]
  =&gt;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: &lt;unknown&gt;
  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
  </code></pre>
  
  <p>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? </p>
  
  <p>EDIT: I did some more testing, and it looks like the java test page itself (<a href="http://www.java.com/en/download/testjava.jsp" rel="nofollow">http://www.java.com/en/download/testjava.jsp</a>) 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.</p>