TOP > 技術メモ > Java > 障害調査(トラブルシューティング) > Swing AWT 障害
Swing AWT 障害
- addNotifyでJavaがクラッシュする [2014-10-04]
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)] |