2016-08-11 2 views
0

Я работаю над записывающим устройством с использованием java, где (используя JNI) я должен загрузить некоторые собственные библиотеки (DLL). Ну, я знаю, что для загрузки собственной библиотеки с использованием «System.loadLibrary (libName)», библиотека должна быть установлена ​​на один из путей «java.library.path», однако, если вы используете «System.load (libPath)» там в этом нет необходимости.JVM падает при загрузке собственной библиотеки

Таким образом, я использовал, чтобы загрузить все мои родные библиотеки с помощью «System.load (libPath)» и это работало на всех из них, за исключением одного одного "BurnerCaller.dll", что вызывает JVM сбой с сообщением об ошибке ниже.

# A fatal error has been detected by the Java Runtime Environment: 
# 
# Internal Error (0xe0434352), pid=2280, tid=0x00000000000013a8 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_92-b14) (build 1.8.0_92-b14) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode windows-amd64 compressed oops) 
# Problematic frame: 
# C [KERNELBASE.dll+0xaa7d] 
# 
# 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: 
# C:\Program Files\Java\MainWorkspace\NewAman\hs_err_pid2280.log 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.java.com/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 

Here - подробная информация об ошибке.

Странная вещь, что тогда и только тогда, когда я поставил эту библиотеку в каталог «бин» в настоящее время работает JRE или JDK (что мое приложение использует для запуска) он работает как шарм.

Любая помощь будет оценена, спасибо заранее.

+0

У вас действительно есть несколько родных библиотек *, содержащих код JNI *? Обычно у вас будет только один, и у него будут ссылки DLL на любой другой родной материал, который он использовал. – EJP

+0

нет единственной уникальной библиотеки, которая содержит _JNI Code_ – MDev

+0

Так что это единственная библиотека, которую вам нужно загрузить. – EJP

ответ

0
  1. Попробуйте другие JDK (Oracle JDK, Open JDK, версии 6,7,8). убедитесь, что DLL разрядность (32 против 64) матч JDK разрядность
  2. Debug нативного кода

Это выглядит как чистая родную проблема, и вы должны использовать собственные средства.

Если у вас есть исходный код BurnerCaller.dll, вы можете прикрепить (Visual Studio, WinDbg) \ debug \ исправить его. По крайней мере, вы увидите stacktrace родной аварии. Если у вас нет суса - просто положите его в java bin каталог, самый простой способ.

Когда загрузчик системы загружает библиотеку, он вызывает DllMain для этой библиотеки, похоже, что ошибка находится где-то вокруг нее.

+0

Большое спасибо за ваш ответ, у меня есть код библиотеки, и я постараюсь отладить его прямо сейчас. Я надеюсь, что он работает! – MDev

Смежные вопросы