Как обработать Java-вызов DLL, который иногда генерирует EXCEPTION_ACCESS_VIOLATION? - PullRequest
0 голосов
/ 21 декабря 2011

Я кодировал Java-приложение, которое через JNI вызывает решатель линейного программирования, написанный на C ++.После нескольких успешных вызовов я получаю сообщение об ошибке EXCEPTION_ACCESS_VIOLATION, и приложение завершается.Как можно устранить ошибку и сохранить работоспособность Java-приложения?

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Прежде всего, если DLL потерпит крах, JVM прекратит работу.

Это один из недостатков использования JNI. Так что это, как правило, не так просто, как глотать какое-то исключение из DLL.

В вашем случае ошибка намекает на унифицированную память. Вы должны смотреть в сторону от индексации в вашем коде.

Вы должны опубликовать свой код, хотя, чтобы получить дополнительную помощь

0 голосов
/ 22 декабря 2011

Невозможно поддерживать работу JVM, если в собственном коде произошло нарушение доступа.

Есть несколько вещей, которые вы можете сделать.

  • Лучше всего - тщательно отладить вашу библиотеку без JNI, с небольшим автономным клиентом C ++, найти причину этого нарушения и добавить излишние проверки (неправильное использование указателя, неправильная очистка памяти и т. Д.)
  • Запустите вашу DLL в отдельном процессе JVM, который несет полную ответственность за предоставление этой функциональности решателя, обменивайтесь данными со второй JVM, используя сокеты, tcp-ip, soap, rest - все, что вы предпочитаете. Затем используйте некоторые из них, например Java Service Wrapper, для запуска этой второй JVM и настройте ее так, чтобы она перезапускала JVM в случае сбоя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...