Swing AWT 障害

addNotifyでJavaがクラッシュする

画面描画時に呼ばれるaddNotify。その内部で実行されるネイティブ処理(ole32.dll の CoGetTreatAsClass)でJavaがクラッシュする。
スレッドを見ると、EDT上での実行中にクラッシュしているため、SwingEDTルール違反というのも考えにくい。
ところで、Javaからole32.dllにアクセスする時は、恐らくJNIを使用して「awt.dll」経由でアクセスしているはずだが、
なぜか、エラーレポートには「awt.dll」が登場していない・・・。

この問題の原因は以下が考えられるが、
JVMやハードウェアの問題というのは、可能性として低いのではないか。
Oracleのバグチケットにも原因不明のように記述されているし、
一般の情報サイトによるとWindows8だと問題が出なかったという報告もある。

  • OS のバグ
  • Java JNI のバグ
  • JVM のバグ
  • ハードウェアの問題

情報サイトをまとめると、特に問題が発生しやすい画面は以下となっている。

  • Tableを使用した画面
  • 複雑な画面(多数の部品を使用している)
  • 複雑な部品を使用している画面(深い部品構造)
詳細
Bug Ticket JDK-6967456 : jvm crash on sun.awt.windows.WComponentPeer.addNativeDropTarget
Status 未解決
JRE 6u20 - 6u45
OS Windows 7
エラーレポート
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x776cd7ca, pid=284, tid=1892
#
# JRE version: 6.0_37-b06
# Java VM: Java HotSpot(TM) Client VM (20.12-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [ole32.dll+0x2d7ca]
#
# 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 (0x03ab9400):  JavaThread "AWT-EventQueue-0" [_thread_in_native, id=1892, stack(0x03fe0000,0x04030000)]

siginfo: ExceptionCode=0xc0000005, writing address 0x00000028

.....

Stack: [0x03fe0000,0x04030000],  sp=0x0402e89c,  free space=314k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ole32.dll+0x2d7ca]  CoGetTreatAsClass+0x309b
C  [ole32.dll+0x2d300]  CoGetTreatAsClass+0x2bd1
C  [ole32.dll+0x2d369]  CoGetTreatAsClass+0x2c3a
C  [ole32.dll+0x8e893]  CoLockObjectExternal+0x22

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.awt.windows.WComponentPeer.addNativeDropTarget()J+0
j  sun.awt.windows.WComponentPeer.addDropTarget(Ljava/awt/dnd/DropTarget;)V+9
j  java.awt.dnd.DropTarget.addNotify(Ljava/awt/peer/ComponentPeer;)V+60
j  java.awt.Component.addNotify()V+297
j  java.awt.Container.addNotify()V+8
j  javax.swing.JComponent.addNotify()V+1
j  java.awt.Container.addNotify()V+61
j  javax.swing.JComponent.addNotify()V+1
j  java.awt.Container.addNotify()V+61
j  javax.swing.JComponent.addNotify()V+1
j  java.awt.Container.addNotify()V+61
j  javax.swing.JComponent.addNotify()V+1
j  javax.swing.JRootPane.addNotify()V+1
j  java.awt.Container.addNotify()V+61
j  java.awt.Window.addNotify()V+73
j  java.awt.Dialog.addNotify()V+51
j  java.awt.Window.pack()V+28
j  javax.swing.JFileChooser.createDialog(Ljava/awt/Component;)Ljavax/swing/JDialog;+126
j  javax.swing.JFileChooser.showDialog(Ljava/awt/Component;Ljava/lang/String;)I+17
・・・
v  ~StubRoutines::call_stub

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

Java Threads: ( => current thread )
  0x03ad1c00 JavaThread "Basic L&F File Loading Thread" [_thread_blocked, id=1960, stack(0x05fc0000,0x06010000)]
  0x012c9000 JavaThread "Swing-Shell" daemon [_thread_in_native, id=340, stack(0x041b0000,0x04200000)]
  0x012c8000 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=2036, stack(0x04160000,0x041b0000)]
  0x03b4e000 JavaThread "TimerQueue" daemon [_thread_blocked, id=2780, stack(0x07ad0000,0x07b20000)]
  0x03baa000 JavaThread "D3D Screen Updater" daemon [_thread_blocked, id=3076, stack(0x06af0000,0x06b40000)]
  0x005f9800 JavaThread "DestroyJavaVM" [_thread_blocked, id=3356, stack(0x00540000,0x00590000)]
  0x03ac6000 JavaThread "Validator" [_thread_blocked, id=3208, stack(0x040c0000,0x04110000)]
=>0x03ab9400 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=1892, stack(0x03fe0000,0x04030000)]
  0x03a21000 JavaThread "AWT-Windows" daemon [_thread_in_native, id=2648, stack(0x03f40000,0x03f90000)]
  0x03a20800 JavaThread "AWT-Shutdown" [_thread_blocked, id=3104, stack(0x03ef0000,0x03f40000)]
  0x03a20400 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2712, stack(0x03ea0000,0x03ef0000)]
  0x012a4400 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=936, stack(0x03980000,0x039d0000)]
  0x0129d800 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=3232, stack(0x03930000,0x03980000)]
  0x0129c800 JavaThread "Attach Listener" daemon [_thread_blocked, id=4052, stack(0x038e0000,0x03930000)]
  0x0129b800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2380, stack(0x03890000,0x038e0000)]
  0x01291000 JavaThread "Finalizer" daemon [_thread_blocked, id=2268, stack(0x03840000,0x03890000)]
  0x01289400 JavaThread "Reference Handler" daemon [_thread_blocked, id=2292, stack(0x037f0000,0x03840000)]
								

▲ページの先頭へ