VIOLATION DE L'ACCÈS AUX EXCEPTIONS JavaFX


J'ai un problème avec l'application de bureau JavaFX, en particulier avec les fonctionnalités de rendu 3d. Chaque fois que j'essaie de créer et de lancer une application JavaFX, JVM crshes et j'obtiens une erreur similaire à celle suivante:

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

Journal entier: http://pastebin.com/FC6NfVjF

J'ai essayé différentes versions de java (1.7_51, 1.7_60, ainsi que 1.8_5), j'ai essayé de mettre à jour les pilotes de carte graphique. Certains projets se lancent, mais dès que je veux afficher des effets "plus compliqués" (c'est à dire survolant un bouton), j'obtiens la même exception.

À en juger par la stacktrace, je crois que cela a quelque chose à voir avec 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

Je travaille sur une machine avec Windows 8.1 et DirectX 11. Cela n'aidera probablement pas, mais ici, je colle également le journal de l'outil de diagnostic DirectX: http://pastebin.com/giN4AFv4

Merci pour toute contribution.

Author: ember, 2014-07-14

1 answers

L'accident s'est passé à l'intérieur de C:\Windows\system32\igdumdim64.dll au décalage 0xe5fe9.
Cette bibliothèque fait partie du pilote Intel HD Graphics.

Voici une astuce rapide pour trouver cela dans le journal des accidents.

# Problematic frame:
# C  0x0000000000000000

Le pointeur d'instruction zéro signifie qu'il y a eu un appel indirect et que l'adresse cible était NULL. L'adresse de retour pour cet appel est susceptible d'être en haut de la pile.

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

00007ffb308b5fe9 est enregistrée l'adresse de retour. Trouvons la gamme à laquelle il appartient.

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

Trouver le décalage dans la bibliothèque en soustrayant l'adresse de base:
0x00007ffb308b5fe9 - 0x00007ffb307d0000 = 0xe5fe9

Ensuite, ayant la dll en main, nous pouvons la démonter et déterminer la fonction exacte au décalage donné.

P. S.
Il existe également un drapeau Java spécifique à Windows -XX:+CreateMinidumpOnCrash qui aide à produire un vidage sur incident plus significatif pour l'analyse.

 2
Author: apangin, 2014-07-16 03:25:04