JavaFX EXCEPTION_ACCESS_VIOLATION [英] JavaFX EXCEPTION_ACCESS_VIOLATION

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

问题描述

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

 
#Java运行时环境检测到致命错误:

#EXCEPTION_ACCESS_VIOLATION(0xc0000005),pc = 0x0000000000000000,pid = 8440,tid = 9008

#JRE版本:Java(TM)SE运行时环境(7.0_51-b13)(版本1.7.0_51-b13)
#Java VM:Java HotSpot(TM)64位服务器VM(24.51-b03)混合模式windows-amd64压缩oops)
#有问题的帧:
#C 0x0000000000000000

#无法写入核心转储。默认情况下,在Windows的客户端版本上未启用小型转储器

#包含更多信息的错误报告文件保存为:
#D:\ apps\desktop\hs_err_pid8440.log

#如果您想提交错误报告,请访问:
#http://bugreport.sun.com/bugreport/crash.jsp
#崩溃在本机代码中发生在Java虚拟机之外。
#查看有问题的框架,了解报告错误的位置。

整个日志: 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

这个库是Intel HD Graphics Driver的一部分。



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

 #Problematic frame:
#C 0x0000000000000000

零指令指针意味着有一个间接调用,并且目标地址碰巧是 NULL 。此调用的返回地址可能位于堆栈顶部。

 堆栈顶部:(sp = 0x000000000ef4d398)
0x000000000ef4d398:00007ffb308b5fe9 000000000e979800

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

 动态库:
...
0x00007ffb307d0000 - 0x00007ffb31019000 C :\ Windows \ system32 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\基地址:

0x00007ffb308b5fe9 - 0x00007ffb307d0000 = 0xe5fe9



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



PS

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


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:\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.
#

Entire log: http://pastebin.com/FC6NfVjF

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.

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

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

Thanks for any input.

解决方案

The crash has happened inside C:\Windows\system32\igdumdim64.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

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 is the saved return address. Let's find the range it belongs to.

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

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

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

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天全站免登陆