代码之家  ›  专栏  ›  技术社区  ›  ember

JavaFX例外_ACCESS_VIOLATION

  •  4
  • ember  · 技术社区  · 10 年前

    我对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

    感谢您的任何意见。

    1 回复  |  直到 10 年前
        1
  •  12
  •   apangin    10 年前

    车祸发生在里面 C:\Windows\system32\igdumdim64.dll 偏移时 0xe5fe9 .
    此库是Intel HD图形驱动程序的一部分。

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

    # 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 这有助于为分析生成更有意义的崩溃转储。