Tag: jni

从C ++调用非静态java方法时的JNI访问冲突

我试图从c ++调用非静态java方法。 Sample2.java: public class Sample2 { public int intMethod(int n) { return n*n; } } JNITest.cpp: #include “stdafx.h” #include #include #include #include #include using namespace std; #ifdef _WIN32 #define PATH_SEPARATOR ‘;’ #else #define PATH_SEPARATOR ‘:’ #endif int _tmain(int argc, _TCHAR* argv[]) { JavaVMOption options[3]; static JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; long status; jclass […]

ReferenceTable溢出(最大= 1024)

在我的android应用程序中,我经常调用一个返回一些数据的本机函数。 经过多次通话后,我收到了一个显示以下跟踪的崩溃。 W/dalvikvm(14588): ReferenceTable overflow (max=1024) W/dalvikvm(14588): Last 10 entries in JNI pinned array reference table: W/dalvikvm(14588): 1014: 0x41f3b7a8 cls=[B (38036 bytes) W/dalvikvm(14588): 1015: 0x411c6f88 cls=[B (1620 bytes) W/dalvikvm(14588): 1016: 0x405b2f48 cls=[B (1052 bytes) W/dalvikvm(14588): 1017: 0x411c4be0 cls=[B (92 bytes) W/dalvikvm(14588): 1018: 0x41f44c40 cls=[B (38036 bytes) W/dalvikvm(14588): 1019: 0x411c5a78 cls=[B (60 bytes) W/dalvikvm(14588): 1020: 0x413ac4e8 […]

由不同的类加载器加载的相同本机库

请考虑以下情形: 我有两个java类,使用不同的系统类加载器加载。 我有一个实现了队列的本机库。 这两个类都将加载相同的库,并将元素添加到队列中。 可能吗? 如果是这样,本地库实现是否将在这两个类之间共享。

通过JNI C代码将PNG图像作为BufferedImage加载到Java中

我有以下问题。 我有C代码,它将PNG图像作为基本原始数据获取并将其保存在内存中。 我希望通过使用JNI将这些原始数据转换为Java中的BufferedImage。 有谁知道这样做或以前做过这个?

尝试通过jni调用从java更改Windows鼠标光标图标

在我的java应用程序中,即时尝试使用具有透明度的argb 32位bmp文件更改鼠标光标。 我想进行jni调用以从Windows更改它,因为在java中更改光标会给我一个非常糟糕的鼠标光标(所有透明度都是0x00或0xFF) 目前我正在尝试使用函数SetClassLong作为参数: 来自java的hWnd(我得到了它的方法http://download.oracle.com/javase/1.3/docs/guide/awt/AWT_Native_Interface.html ) GCL_HCURSOR 和一个由原始argb 32位bmp缓冲区构成的游标 这段代码适用于示例win32 atl windows测试程序: HBITMAP hBitmap = (HBITMAP)CreateBitmap(32, 32, 1, 32, pRawBmpData); BITMAP bmp; ::GetObject(hBitmap, sizeof(BITMAP), &bmp); HBITMAP hMask = ::CreateCompatibleBitmap(::GetDC(NULL), bmp.bmWidth, bmp.bmHeight); ICONINFO ii = {0}; ii.fIcon = FALSE; ii.hbmColor = hBitmap; ii.hbmMask = hMask; ii.xHotspot = 0; ii.yHotspot = 0; HCURSOR cursor = ::CreateIconIndirect(&ii); SetCursor(cursor); […]

在HBase MapReduce任务中加载本机共享库

最近我试图在JNI代码中实现我的算法(使用C ++)。我这样做并生成了一个共享库。 这是我的JNI课程。 public class VideoFeature{ // JNI Code Begin public native static float Match(byte[] testFileBytes, byte[] tempFileBytes); static { System.loadLibrary(“JVideoFeatureMatch”); } // JNI Code End } 在主要function,我写 // MapReduce Configuration conf = HBaseConfiguration.create(); // DistributedCache shared library DistributedCache.createSymlink(conf); // Both following ways seem work. // DistributedCache.addCacheFile(new URI(“/home/danayan/Desktop/libJVideoFeatureMatch.so#JVideoFeatureMatch”), conf); DistributedCache.addCacheFile(new URI(“hdfs://danayan-pc:9000/lib/libJVideoFeatureMatch.so#libJVideoFeatureMatch.so”), conf); 在map方法中,代码跟随工作。 public static […]

c ++插件 – > JNI – > Java Classpath

我正在尝试为应用程序创建一个插件。 插件需要用c ++编写。 我想在Windows和Mac上使用插件,所以用Java编写插件会很棒。 我的问题是,还有一个使用Java的插件。 由于它们使用相同的主应用程序,因此已经有一个正在运行的JavaVM。 JavaVM *jvm = NULL; jsize jvm_count = 0; jint res=0; res = JNI_GetCreatedJavaVMs (&jvm, 1, &jvm_count); 我的问题:如何更改/修改现有JavaVM的Classpath? 或者我如何创建新的/第二个JavaVM? 我试图通过JNI加载我的jar文件: /* URL CLASS */ jclass URLcls; URLcls = env->FindClass(“java/net/URL”); /* URL CLASS CONSTRUCTOR*/ jmethodID URLclsMid; URLclsMid = env->GetMethodID(URLcls, “”,”(Ljava/lang/String;)V”); /* URL OBJECT */ jobject URLobj; jstr = env->NewStringUTF(“file:/path/to/test/file/test.jar”); URLobj = […]

SWIGTYPE_p_p_:结构指针上的指针(从C / C ++到Java)

我正在使用Swig生成Java类。 我需要处理结构上指针的指针 。 我有这个结构: struct Model { uint32_t serial; } 我在C / C ++中有一个需要包装的函数: void getModel( Model ** model ){ // instructions… } 我得到这个Java类的结果: public class SWIGTYPE_p_p_Model { private long swigCPtr; protected SWIGTYPE_p_p_Model(long cPtr, boolean futureUse) { swigCPtr = cPtr; } protected SWIGTYPE_p_p_Model() { swigCPtr = 0; } protected static long getCPtr(SWIGTYPE_p_p_Model obj) { return […]

从JNI调用函数指针

我已经在cpp中使用原型实现了一个函数 MyFunction(int size,int(* callback)(UINT16 * arg1,UINT16 * arg2)); 第二个参数是一个必须在java中实现的函数指针。 我该如何实现该function? 另外我如何在JNI中调用MyFunction? 请帮忙

Android NDK。 找不到本机Lcom的实现

毕竟我已经设法“准备”我的NDK日食(至少我认为如此),它不再在c代码争论,但现在我得到“没有找到本机Lcom的实现”任何时候我执行任何本机代码。它也发生在NDK的样品上.. 我的.java … private native float pi(); static { System.loadLibrary(“shit”); } … System.out.println(pi()); … 我的.cpp #include jfloat Java_com_example_shit_MainActivity_pi(JNIEnv * env, jobject obj) { return 3.1415; } 我的.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := shit LOCAL_SRC_FILES := shit.cpp include $(BUILD_SHARED_LIBRARY) 我的错误日志 11-14 18:30:16.231: D/dalvikvm(1739): Trying to load lib /data/data/com.example.shit/lib/libshit.so 0x413b1fc8 11-14 18:30:16.241: D/dalvikvm(1739): Added […]