VIOLAZIONE DELL'ACCESSO ALLE ECCEZIONI JavaFX


Ho un problema con l'applicazione desktop JavaFX, in particolare con le funzionalità di rendering 3d. Ogni volta che provo a costruire e lanciare l'applicazione JavaFX, crshes JVM e ottengo un errore simile al seguente:

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

Intero registro: http://pastebin.com/FC6NfVjF

Ho provato diverse versioni di java (1.7_51, 1.7_60 e 1.8_5), ho provato ad aggiornare i driver della scheda grafica. Alcuni progetti vengono avviati, ma non appena voglio visualizzare alcuni effetti "più complicati" (cioè passando il mouse su un pulsante), ottengo la stessa eccezione.

A giudicare dallo stacktrace, credo che abbia qualcosa a che fare con 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

Sto lavorando su macchine con Windows 8.1 e DirectX 11. Probabilmente non aiuterà, ma qui sto anche incollando il registro degli strumenti diagnostici DirectX: http://pastebin.com/giN4AFv4

Grazie per qualsiasi input.

Author: ember, 2014-07-14

1 answers

L'arresto anomalo si è verificato all'interno di C:\Windows\system32\igdumdim64.dll all'offset 0xe5fe9.
Questa libreria fa parte del driver Intel HD Graphics.

Ecco un rapido suggerimento su come trovare questo dal registro degli arresti anomali.

# Problematic frame:
# C  0x0000000000000000

Puntatore a zero istruzioni significa che c'è stata una chiamata indiretta e l'indirizzo di destinazione è stato NULL. È probabile che l'indirizzo di ritorno per questa chiamata sia in cima allo stack.

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

00007ffb308b5fe9 è l'indirizzo di ritorno salvato. Troviamo la gamma a cui appartiene.

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

Trova il offset nella libreria sottraendo l'indirizzo di base:
0x00007ffb308b5fe9 - 0x00007ffb307d0000 = 0xe5fe9

Quindi, avendo la dll in mano, possiamo smontarla e capire la funzione esatta all'offset dato.

Post SCRIPTUM
C'è anche un flag Java specifico per Windows -XX:+CreateMinidumpOnCrash che aiuta a produrre un crash dump più significativo per l'analisi.

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