JavaFX EXCEPTION_ACCESS_VIOLATION

我有一个JavaFX桌面应用程序的问题,特别是3D渲染function。 每次我尝试构建和启动JavaFX应用程序时,JVM都会出现错误,并且我会得到类似以下错误的错误:

# # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000000000000, pid=8440, tid=9008 # # JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13) # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode windows-amd64 compressed oops) # Problematic frame: # C 0x0000000000000000 # # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows # # An error report file with more information is saved as: # D:\apps\desktop\hs_err_pid8440.log # # If you would like to submit a bug report, please visit: # http://bugreport.sun.com/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # 

整个日志: http : //pastebin.com/FC6NfVjF

我尝试了不同的java版本(1.7_51,1.7_60,以及1.8_5),我尝试更新显卡驱动程序。 有些项目确实会启动,但只要我想显示一些“更复杂”的效果(即hover按钮),我就会得到相同的exception。

从stacktrace来看,我认为它与directX有关。

 j com.sun.prism.d3d.D3DVertexBuffer.nDrawIndexedQuads(J[F[BI)I+0 j com.sun.prism.d3d.D3DVertexBuffer.drawQuads(I)V+13 j com.sun.prism.impl.VertexBuffer.flush()V+12 

我正在使用Windows 8.1和DirectX 11的机器上工作。可能它没有帮助,但在这里我也粘贴了DirectX诊断工具日志: http : //pastebin.com/giN4AFv4

感谢您的任何意见。

崩溃发生在偏移量为0xe5fe9 C:\Windows\system32\igdumdim64.dll中。
该库是Intel HD Graphics Driver的一部分。

以下是如何从崩溃日志中找到此内容的快速提示。

 # Problematic frame: # C 0x0000000000000000 

零指令指针意味着存在间接调用,并且目标地址恰好为NULL 。 此调用的返回地址可能位于堆栈顶部。

 Top of Stack: (sp=0x000000000ef4d398) 0x000000000ef4d398: 00007ffb308b5fe9 000000000e979800 

00007ffb308b5fe9是保存的返回地址。 让我们找到它所属的范围。

 Dynamic libraries: ... 0x00007ffb307d0000 - 0x00007ffb31019000 C:\Windows\system32\igdumdim64.dll 

通过减去基址来查找库中的偏移量:
0x00007ffb308b5fe9 – 0x00007ffb307d0000 = 0xe5fe9

接下来,掌握了dll,我们可以将其拆解并找出给定偏移处的确切函数。

PS
还有一个特定于Windows的Java标志-XX:+CreateMinidumpOnCrash ,它有助于为分析生成更有意义的崩溃转储。

Interesting Posts