JavaFX EXCEPTION_ACCESS_VIOLATION

标签 java javafx jvm access-violation directx-11

我在使用 JavaFX 桌面应用程序时遇到问题,特别是在 3D 渲染功能方面。 每次我尝试构建和启动 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),我尝试更新显卡驱动程序。 有些项目确实启动了,但是一旦我想显示一些“更复杂”的效果(即悬停按钮),我就会得到同样的异常。

从堆栈跟踪来看,我认为这与 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

感谢您的任何意见。

最佳答案

崩溃发生在C:\Windows\system32\igdumdim64.dll内,偏移量为0xe5fe9
该库是英特尔高清显卡驱动程序的一部分。

以下是如何从崩溃日志中查找此问题的快速提示。

# 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,我们就可以反汇编它并找出给定偏移量处的确切函数。

附注
还有一个特定于 Windows 的 Java 标志 -XX:+CreateMinidumpOnCrash 有助于生成更有意义的故障转储以供分析。

关于JavaFX EXCEPTION_ACCESS_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743791/

相关文章:

java - 如何让TableView不显示缺失的行?

java - 远程调试 Java - Solr

Java - 如何扫描 token 并检查该 token 是否存在且是否为 double

Java Eclipse : ComboBox action button based on item selected (e. g.,温度转换)

java - 字符串化 Java 对象在 JSON.parse Javascript 中抛出错误

java - 学习核心 Java 后的客户端-服务器数据库编程

java - 无法使用 JavaFX MediaPlayer 播放视频

JavaFX - 不同类型的表列列表

c++ - JNI C++ 调试技术?

java - JVM 基于堆栈的内存管理的已知尝试