草庐IT

JNI_ASSERT

全部标签

android - Glide assert : java. lang.IllegalArgumentException: 你必须在主线程上调用这个方法

有没有人使用Glide从后台线程中获取图像?我不断得到这个断言:java.lang.IllegalArgumentException:Youmustcallthismethodonthemainthread但是根据这个线程,它应该可以工作:https://github.com/bumptech/glide/issues/310但是,我无法让它工作,除非我从主线程调用它。这是我在主线程中尝试做的事情:Glide.get(mContext);loadUserImage(userImageUrl);//wait5secondsbeforetryingagainintimageLoadingT

Android NDK 溢出 dalvik JNI 本地引用表

我有以下问题,我从c++向java发送了巨大的string[]。巨大=最多20行;我正在做以下事情jintjtype=2;jstringemptyString=env->NewStringUTF("");jobjectArraydata=(jobjectArray)env->NewObjectArray(7,env->FindClass("java/lang/String"),emptyString);env->SetObjectArrayElement(data,0,env->NewStringUTF(item->get_id().c_str());env->SetObjectArr

Java UncaughtExceptionHandler 使用 JNI 没有任何异常

我有一个运行一系列任务的Java库。我使用以下方法注册了一个默认的未捕获异常处理程序:Thread.setDefaultUncaughtExceptionHandler(newJavaUncaughtExceptionHandler());UncaughtExceptionHandler实现了UncaughtExceptionHandler,只在STDERR中记录错误信息。我的Java库是通过JNI从C++代码调用的,JNI使用ExceptionCheck()调用它,并在C++中将错误记录为FATAL。问题是:在运行时,当我的Java代码中发生RuntimeException(或任何其

java - 使用 JNI 将字符串从 Java 传递到 C++

我有一个Android应用程序可以获取未读的Facebook通知和收件箱。该应用程序必须在QT中完成,但我几乎不了解QTC++,所以我在java中开发了该应用程序,并使用JNI从QT调用java类。这工作正常,但问题是每次有新的Facebook通知/消息时我都需要发送一个插槽(在QT端)。所以我的问题是:每分钟,我如何从Java通知QT我有一条新消息并发送该字符串?这是我的java代码:主要类:publicclassMainActivityextendsFragmentActivity{...staticpublicvoidstartFacebookActivity(){Stringm

java - JNI 调用静态方法。类对象是必需的吗?

开始使用JNI从C++调用静态java方法。具体来说,在获得jclass(使用FindClass)和jmethodID(使用GetStaticMethodID)之后,我继续调用CallStatic*MethodA例程系列。事实证明,所有这些例程都将jclass作为第一个参数。我开始想知道为什么需要类对象:因为所有信息都在GetStaticMethodID中提供,类对象对于JVM完成工作似乎是不必要的。然后我尝试调用这些例程,同时为第一个参数传递NULL,调用成功。我的问题:使用NULL类对象调用这些方法是否安全?动机是:如果确实合法,我将不必为后续调用静态方法缓存类对象(同时记住调用N

java - 在 C++ 中创建一个 byte[][] 并使用 JNI 将其返回给 Java

我有一个用C++编写的JNI函数,它将字节数组作为输入,对其进行分段,然后将字节数组的数组返回给Java。JNIEXPORTjobjectArrayJNICALLJava_class_method(JNIEnv*env,jobjecto,jbyteArraydataToSegment);在Java方面,它很简单:byte[]arg=getRandomByteArray();Object[]retVal=x.method(arg);现在,我发现JNI部分有点棘手。我打算创建一个对象数组,每个对象都是一个字节数组。这是因为JNI只定义了有限数量的Java类型。有一个jbyteArray类型

c++ - 带有 static_assert 的漂亮 sfinae

我正在尝试创建一个事件管理器来注册接收者。为此,我希望能够构造一个具有给定参数的std::function。但是,我希望最终用户能够轻松理解该错误。我考虑过使用SFINAE和依赖于类型的static_assert来执行此操作,但我遇到了麻烦,因为这两个函数在有效输入上变得不明确。此外,我希望用户可以收到多个错误原因。由于有两个失败点(提供无效的仿函数和提供错误的事件类型),我希望总共有3个函数,第一个是正确输入的函数,然后是不正确的输入(而不是有4个函数用于每个状态的组合)。这可以用c++17的ifconstexpr解决,但我的目标平台是c++14,所以需要使用其他方法。我目前的尝试(

c++ - 如何将类型的名称作为字符串嵌入到 static_assert() 中?

这个问题在这里已经有了答案:Integratetypenameinstatic_assertoutput?(4个答案)关闭8年前。问题以下内容不会生成,因为消息不是字符串文字。templatestructFoo{Foo(){static_assert(is_pod::value,typeid(T).name());}};最终,如果我尝试编译Foofb;,我想要一条失败消息,如“Barmustbeapod-type”.是否可以按照static_assert的要求在编译期间构建此字符串?

java - 如何写入和读取从java传递给jni的bytebuffer

我的android项目需要帮助。我想将缓冲区从java传递到jni,我的C++代码将填充数据。然后java将它们显示在屏幕上。我对C++不太熟悉,不知道如何写入缓冲区。这就是我得到的。在Java中ByteBufferbb=ByteBuffer.allocateDirect(216);IssmJni.processBuffer(bb);本地方法publicstaticnativevoidprocessBuffer(ByteBufferbb);我不使用jni_onload,所以没有javah在C++中staticvoidfillBuffer(JNIEnv*env,jclassclazz,j

c++ - JNI_CreateJavaVM() 以退出代码 1 终止

我正在尝试使用JNI从C++调用Java方法。为此,我安装了jdk1.7.0_51,链接到jdk1.7.0_51\lib\jvm.lib,包括jdk1.7.0_51\include和jdk1.7.0_51\include\win32。在VisualStudio2012中使用以下代码,我尝试创建一个Javavm对象-但该函数总是以退出代码1终止我的应用程序(该函数不返回1:我的程序完全终止并发送退出代码1)。#include#include"jni.h"intmain(intargc,char*argv[]){JNIEnv*env=nullptr;JavaVM*jvm=nullptr;J