Я вызываю панель Java Swing из приложения C / C ++, создающего JavaVM (). Все отлично работает По любой причине, если происходит сбой C / C ++, я вижу, что Java Runtime Environment обнаружил фатальную ошибку. Сбой произошел за пределами JVM в собственном коде.
Могу ли я установить в JVM какой-нибудь вариант, чтобы игнорировать ошибки в нативном коде? Ниже сообщение.
Неустранимая ошибка была обнаружена средой выполнения Java:
SIGSEGV (0xb) при pc = 0xfd933144, pid = 29358, tid = 1
Версия JRE: 6.0_22-b04 Java VM: клиентская виртуальная машина Java HotSpot (TM)
(17.1-b03 смешанный режим solaris-sparc) Проблемный кадр: C
[libc.so.1 + 0x33144] strlen + 0x80Если вы хотите отправить отчет об ошибке, посетите:
http://java.sun.com/webapps/bugreport/crash.jsp Авария произошла
вне виртуальной машины Java в нативном коде. Смотри проблемный
рамка для сообщения об ошибке.
Абсолютно нет
Если вы получаете фатальную ошибку, это потому, что JRE обнаружил ситуацию, когда он считает, что произошло серьезное повреждение структур данных JRE; например куча была повреждена.
Невозможно заставить JRE продолжать работу с потенциально поврежденным состоянием. И это было бы плохой идеей, чтобы попытаться в любом случае.
Вам необходимо найти и исправить проблемы в коде C / C ++, которые вызывают эти сбои. Если это слишком сложно, то:
System.exec()
… или что угодно.(Или, поскольку вы запускаете JVM внутри приложения C / C ++, заставьте его запустить вместо этого отдельную JVM.)
Как указал @Stephen C, вы должны попытаться исправить сбои, а не игнорировать их и смотреть в другую сторону.
Но в случае, если сбои выходят за рамки (например, библиотека с ошибками), вы можете переписать ваше приложение, чтобы оно запускалось с Java. Программа на Java не будет делать ничего другого, кроме как вызвать приложение C ++ через JNI, имея вызов C ++ в нативном коде, заключенный в блок try / catch. Если вы ожидаете исключения (например, нарушение доступа к памяти), просто перехватите его и ничего не делайте.
Пример кода можно увидеть в этом SO ответе: https://stackoverflow.com/a/918891/1043352