JVM падает при попытке создания объекта NewObject через JNI [дубликат]

  1. Всегда пытайтесь отправлять заголовки в почтовую функцию.
  2. Если вы отправляете почту через localhost, тогда выполните настройки smtp для отправки почты.
  3. Если вы отправляете почту через затем проверьте, включена ли функция отправки электронной почты на вашем сервере.
2
задан Martin Rindarøy 11 March 2016 в 15:20
поделиться

1 ответ

В коде есть несколько ошибок.

  1. jobject myObject и jclass myClass повторно используются в вызовах JNI. Все jobjects, созданные внутри JNI-метода, по умолчанию являются локальными ссылками. Всякий раз, когда возвращается метод JNI, все локальные ссылки автоматически освобождаются. Если вы хотите повторно использовать jobject (или jclass, который также является ссылкой на объект) через вызовы методов, вы должны преобразовать его в глобальную ссылку, используя NewGlobalRef . Если глобальная ссылка больше не нужна, ее следует удалить с помощью DeleteGlobalRef , иначе объект, на который ссылается, никогда не будет собираться с помощью мусора.
  2. JNIEnv* кэшируется. В общем случае JNIEnv* никогда не должны храниться для последующего повторного использования. Вместо этого вы должны использовать JNIEnv* в качестве первого аргумента для каждой функции JNI. В качестве альтернативы это может быть получено вызовом GetEnv . Обратите внимание, что каждый поток имеет свой собственный JNIEnv*, который не применим к другим потокам.
5
ответ дан apangin 22 August 2018 в 21:52
поделиться
  • 1
    Спасибо, что расчистили эти вещи для меня! В понедельник я буду вносить изменения, учитывая ваши комментарии и сообщать о моих результатах. – Martin Rindarøy 12 March 2016 в 15:02
  • 2
    Преобразование jobject myObject и jclass myClass в глобальные ссылки с использованием NewGlobalRef делало трюк. Благодаря! – Martin Rindarøy 14 March 2016 в 09:54
Другие вопросы по тегам:

Похожие вопросы: