JVM работает в затмении, вылетает на улицу с SIGSEGV - PullRequest
3 голосов
/ 16 января 2012

Я использую библиотеку native-tray-adapter , для которой требуется библиотека jni-utils-1.0 , чтобы у значков в Ubuntu не было прозрачного фона.

Моя программа создает меню с пунктом закрытия меню закрытия программы. Когда я запускаю программу в eclipse, она работает нормально, и я могу без проблем взаимодействовать с иконкой. Когда я экспортирую файл в исполняемую флягу, виртуальная машина Java падает, когда я пытаюсь закрыть программу, программа может отобразить меню по щелчку правой кнопкой мыши, однако щелчок по меню вызывает сбой.

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0xb6d3f746, pid=6193, tid=2121870192

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

Когда я запускал виртуальную машину с аргументом -Xcheck: jni, я получал сообщение об ошибке:

WARNING in native method: JNI call made with exception pending
FATAL ERROR in native method: Bad global or local ref passed to JNI
Aborted

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

Я проверил каталог виртуальной машины в eclipse> справка> о> подробности установки> конфигурация, и это соответствует каталогу команды

$ which java

некоторые дополнительные детали

os: ubuntu 11.10 
eclipse version: 3.7.0 
eclipse library: java6-openjdk 
java version: "1.6.0_26"

если вам нужна дополнительная информация, не стесняйтесь спрашивать. Есть журнал ошибок, однако я не знаю, насколько это будет полезно, и какие части мне нужно будет опубликовать.

Любая помощь в объяснении того, почему это может происходить, способ сделать виртуальную машину такой же, как у eclipse, или другой метод удаления белого фона, который отображается в Ubuntu с использованием стандартного Java TrayIcon's *. 1025 *

EDIT

Я обнаружил, что проблема заключалась в том, как я экспортировал файл jar. Когда я выбрал в экспорте затмения банку:

  1. извлечение необходимых библиотек в сгенерированный JAR

    или

  2. скопировать необходимые библиотеки в подпапку рядом с сгенерированным JAR

Мне удалось правильно взаимодействовать со значком. Я все еще не совсем уверен, в чем проблема, так как я думал, что связывание все равно будет вести себя так же, как независимые библиотеки упакованы внутри или вне JAR.

Это ошибка в упаковке eclipse или есть какая-то другая проблема?

ура

1 Ответ

0 голосов
/ 02 мая 2014

В кавычки из http://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html ->:
Этот сигнал генерируется, когда программа пытается выполнить чтение или запись вне выделенной для нее памяти или для записи в память, доступную только для чтения.(На самом деле, сигналы появляются только тогда, когда программа выходит достаточно далеко за пределы, чтобы быть обнаруженной механизмом защиты памяти системы.) Название является аббревиатурой от «нарушения сегментации».

К распространенным способам получения условия SIGSEGV относятся:разыменование нулевого или неинициализированного указателя, или когда вы используете указатель для перехода по массиву, но не можете проверить конец массива.В разных системах зависит, генерирует ли разыменование нулевой указатель SIGSEGV или SIGBUS

...