JavaFX EXCEPTION_ACCESS_VIOLATION [英] JavaFX EXCEPTION_ACCESS_VIOLATION

查看:30
本文介绍了JavaFX EXCEPTION_ACCESS_VIOLATION的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了 JavaFX 桌面应用程序的问题,特别是 3d 渲染功能.每次我尝试构建和启动 JavaFX 应用程序时,JVM 都会崩溃,并且出现类似于以下错误:

I have a problem with JavaFX desktop application, specifically with 3d rendering functionalities. Every time I try to build and launch JavaFX application, JVM crshes and I get error similiar to following one:

#
# 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:appsdesktophs_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),我尝试更新显卡驱动程序.某些项目确实启动了,但是一旦我想显示一些更复杂"的效果(即悬停按钮),我就会遇到相同的异常.

I tried different java version (1.7_51, 1.7_60, as well as 1.8_5), I tried updating graphic card drivers. Some project does launch, but as soon as I want to display some 'more complicated' effects (i.e. hovering a button), I get the same exception.

从stacktrace来看,我相信它与directX有关.

Judging from the stacktrace, I believe it has something to do with 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

I'm working on machine with Windows 8.1 and DirectX 11. Probably it won't help, but here I'm also pasting DirectX Diagnostic Tool log: http://pastebin.com/giN4AFv4

感谢您的任何意见.

推荐答案

崩溃发生在 C:Windowssystem32igdumdim64.dll 中,偏移量 0xe5fe9.
该库是英特尔高清显卡驱动程序的一部分.

The crash has happened inside C:Windowssystem32igdumdim64.dll at offset 0xe5fe9.
This library is a part of Intel HD Graphics Driver.

这里有一个快速提示,如何从崩溃日志中找到它.

Here is a quick tip how to find this from the crash log.

# Problematic frame:
# C  0x0000000000000000

零指令指针表示存在间接调用,目标地址恰好是NULL.这个调用的返回地址很可能在栈顶.

Zero instruction pointer means there was an indirect call, and the target address happened to be NULL. The return address for this call is likely to be on the top of stack.

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

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

00007ffb308b5fe9 is the saved return address. Let's find the range it belongs to.

Dynamic libraries:
...
0x00007ffb307d0000 - 0x00007ffb31019000      C:Windowssystem32igdumdim64.dll

通过减去基地址找到库中的偏移量:
0x00007ffb308b5fe9 - 0x00007ffb307d0000 = 0xe5fe9

Find the offset in the library by subtracting the base address:
0x00007ffb308b5fe9 - 0x00007ffb307d0000 = 0xe5fe9

接下来,有了 dll,我们可以反汇编它并找出给定偏移量处的确切函数.

Next, having the dll in hand, we can disassemble it and figure out the exact function at the given offset.

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

P.S.
There is also a Windows-specific Java flag -XX:+CreateMinidumpOnCrash that helps to produce a more meaningful crash dump for analysis.

这篇关于JavaFX EXCEPTION_ACCESS_VIOLATION的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆