Java 使用Pdfium库时,在垃圾收集SIG 9期间Android JNI本机崩溃
我正在尝试使用访问我的应用程序中的pdf文件 并添加了一些功能,如使用java和C++进行搜索和高亮显示。问题是,我总是得到一个崩溃没有例外的细节。在调试中,我发现SIGABRT(信号SIGABRT)SIG:9错误地址 我的本职工作是Java 使用Pdfium库时,在垃圾收集SIG 9期间Android JNI本机崩溃,java,android,c++,android-ndk,java-native-interface,Java,Android,C++,Android Ndk,Java Native Interface,我正在尝试使用访问我的应用程序中的pdf文件 并添加了一些功能,如使用java和C++进行搜索和高亮显示。问题是,我总是得到一个崩溃没有例外的细节。在调试中,我发现SIGABRT(信号SIGABRT)SIG:9错误地址 我的本职工作是 #include <fpdftext.h> JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance
#include <fpdftext.h>
JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance, jlong pagePtr) {
unsigned short* buffer;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
FPDFText_GetText(text_page,0,len,buffer);
jstring txt = env->NewString(buffer, len);
FPDFText_ClosePage(text_page);
return txt; }
函数调用
Log.e("Page 0",pdfiumCore.getPageText(pdfDocument,0));
一旦应用程序崩溃,函数就会检索数据。我猜问题是当垃圾收集器试图删除FPDFText\u GetText函数中使用的缓冲区指针时。但我不知道怎么解决它
有什么建议吗 我通过在JNI函数中使用此代码获取数据后删除指针解决了这个问题
JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance,
jlong pagePtr) {
jstring txt;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
unsigned short *buffer = new unsigned short[len];
FPDFText_GetText(text_page, 0, len, buffer);
txt = env->NewString(buffer,len);
delete[](buffer);
FPDFText_ClosePage(text_page);
return txt;}
JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance,
jlong pagePtr) {
jstring txt;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
unsigned short *buffer = new unsigned short[len];
FPDFText_GetText(text_page, 0, len, buffer);
txt = env->NewString(buffer,len);
delete[](buffer);
FPDFText_ClosePage(text_page);
return txt;}