permaculture playing cards*
The moose likes Java in General and the fly likes A fatal error cause JVM crash when running native code(C++) via JNI Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "A fatal error cause JVM crash when running native code(C++) via JNI" Watch "A fatal error cause JVM crash when running native code(C++) via JNI" New topic
Author

A fatal error cause JVM crash when running native code(C++) via JNI

Jeffrey Tian
Ranch Hand

Joined: Jun 02, 2010
Posts: 34
I developed an application in C++ to import .DWG files(Autodesk's drawing file). The application is invoked in Java via JNI. Sometimes, the java application closes it self suddenly by an error:

#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (os_windows_x86.cpp:114), pid=4280, tid=2324
# Error: guarantee(result == -1,"Unexpected result from topLevelExceptionFilter")
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) 64-Bit Server VM (14.0-b16 mixed mode windows-amd64 )
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

--------------- T H R E A D ---------------

Current thread (0x000000000aa5c800): JavaThread "CommandQueue" daemon [_thread_in_native, id=2324, stack(0x0000000016ff0000,0x00000000170f0000)]

Stack: [0x0000000016ff0000,0x00000000170f0000]
[error occurred during error reporting (printing stack bounds), id 0xc0000005]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j net.iceedge.tools.newimport.assets.RealDWG.getBlockTable()Lnet/iceedge/tools/newimport/icedwgwrappers/tables/IceAcDbBlockTable;+0
j net.iceedge.tools.newimport.assets.RealDWG.loadFile()V+119
j net.dirtt.icelib.main.DXFUtilities.optimized.OptimizedDXFParser.readDWG(Ljava/io/File;Lnet/dirtt/icelib/main/DXFUtilities/Unit;)V+17
j net.dirtt.icelib.main.commandmodules.ImportDXFCommand.readDXFDWGFile(Lnet/dirtt/icelib/main/DXFUtilities/DXFFile;)V+126
j net.dirtt.icelib.main.commandmodules.ImportDXFCommand.doAction()Z+169
j net.dirtt.icelib.main.commandmodules.Command.executeFromCommandQueue(Lnet/dirtt/iceconsole/IceConsole;)Z+249
j net.dirtt.icelib.main.commandmodules.CommandQueue$QueueRunner.run()V+105
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub

(net.iceedge.tools.newimport.assets.RealDWG.getBlockTable() is a native method)



It doesn't happen for all dwg files, just for some of them. I found it was caused by the lack of some DLLs. If I added the path which contains all DLLs from Autodesk to java.library.path, there won't be any error. There're over 100 DLLs and I don't want to put all of them into my application.

My application(a DLL file) can be loaded without any problem by Java, so my first question is: when the DLL is loaded, doesn't Java check all dependent libraries for the DLL?

My second question is: Is there a way to catch this error in my C++ code? Java crashes suddenly is too unfriendly for users. I tried using catch(...), but nothing could be caught.

Thanks,
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: A fatal error cause JVM crash when running native code(C++) via JNI
 
Similar Threads
Problem with jar file for application using JNI
How to create jar file for application using JNI?
JVM error on JNI method call
How to create jar file for application using JNI?
Unable to execute JNI in a 64 bit machine.