java – 从本机函数(c,jni)返回一个int会导致应用程序崩溃
发布时间:2020-12-14 23:45:10 所属栏目:Java 来源:网络整理
导读:试图弄清楚为什么c函数调用返回一个int会导致整个应用程序崩溃而没有任何错误/警告. 这是工作代码: jint Java_org_ntorrent_DummyTorrentInfoProvider_next( JNIEnv * env,jobject obj,jint number) { jint test = rand(); __android_log_print(ANDROID_LOG
试图弄清楚为什么c函数调用返回一个int会导致整个应用程序崩溃而没有任何错误/警告.
这是工作代码: jint Java_org_ntorrent_DummyTorrentInfoProvider_next( JNIEnv * env,jobject obj,jint number) { jint test = rand(); __android_log_print(ANDROID_LOG_DEBUG,"HelloNDK!","rand() = %d",test); return number; } 此代码在没有警告的情况下崩溃应用程序: jint Java_org_ntorrent_DummyTorrentInfoProvider_next( JNIEnv * env,test); return number + test; } 在应用程序崩溃之前,我可以在log cat中看到我的日志消息(__ android_log_print) 编辑: 编辑#2:Java端代码: package org.ntorrent; import java.util.ArrayList; import java.util.Random; public class DummyTorrentInfoProvider implements TorrentInfoProvider { public native Integer next(Integer number); //public Integer next() { return _random.nextInt(); } public native void test(); private Random _random = new Random(100); @Override public ArrayList getTorrents() { test(); ArrayList torrents = new ArrayList(); torrents.add( new TorrentInfo("test torrent number 1",next(1),3f,5f)); torrents.add( new TorrentInfo("test torrent number 2",next(2),4f,15f)); torrents.add( new TorrentInfo("test torrent number 555")); torrents.add( new TorrentInfo("test torrent number 3",next(3),13f,5f)); return torrents; } static { System.loadLibrary("test"); } } 解决方法jint Java_org_ntorrent_DummyTorrentInfoProvider_next( JNIEnv * env,jint number) 和 public native Integer next(Integer number); 不符合. Integer是一个Object,而int是一个原语. 如果您的本机代码使用jint,那么您的java代码应该在本机方法的声明中使用int. (如果你希望传递一个Integer,你需要将它视为本机的一个jobject,并跳过箍来访问它 – 它可能更容易使用int / jint并在Integer中进行任何必要的转换. java方面) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |