Tag: jni

调用本机方法时返回java.lang.UnsatisfiedLinkError

我正在尝试为第三方DLL制作Java包装器。 我创建了自己的DLL,充当JNI和第三方DLL之间的中间人。 在java中我加载此DLL很好,但返回错误java.lang.UnsatisfiedLinkError: sixense.Sixense.init()Z . 可能导致此错误的原因以及如何正确调试? Main.java: package sixense_test; import sixense.ControllerData; import sixense.Sixense; public class Main { public static ControllerData[] controllers = new ControllerData[4]; public static boolean quit; public static void main(String[] args) { if(Sixense.init()) { Sixense.setActiveBase(0); Sixense.getAllNewestData(controllers); System.out.println(“X: ” + controllers[0].pos[0] + “Y: ” + controllers[0].pos[1] + “Z: ” + controllers[0].pos[2]); } } } […]

在Cocos2dx中的主/ UI线程上运行代码

编辑:所以问题出在Java方面。 购买完成的听众没有被调用。 这非常有用: IabHelper PurchaseFinishedListener 我的Cocos2dx游戏在Android和iOS上运行良好。 只考虑给我带来麻烦的是Android In-App Billing。 我正在使用JNI从C ++调用Java。 Java代码在Google Play计费系统中来回传递,最终回调C ++代码,指示给用户多少钱(成功购买金额)。 从Java到C ++的调用正在做一些非常奇怪的事情。 运行的C ++代码应该更新两件事的显示。 但是它只更新一个并且它不一致。 此外,从Java到C ++的多次调用导致CCNodes忽略触摸并执行其他奇怪的操作。 在阅读了类似的问题后,我意识到Java或C ++调用可能不在主/ UI线程上。 所以我试着解决这个问题: // Java code IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() { public void onConsumeFinished(Purchase purchase, IabResult result) { if (result.isSuccess()) { String sku = purchase.getSku(); if (sku.equals(IAB_ID_ABC)) { me.runOnUiThread(new Runnable() { public […]

听Java中的系统鼠标点击

我的主要目标是计算特定应用程序上的鼠标点击次数。 想象一下,我在PC上打开了Microsoft Word和Web浏览器。 我的Java代码应该告诉我多少次点击Word和Web浏览器。 我需要应用程序名称和点击次数。 我怎样才能做到这一点? 任何解决方案都必须适用于MAC,Linux和Windows。

JNI – java ArrayList转换为c ++ std :: string *

我试图用C ++中的JNI进行数据转换。 我在使用java的字符串 ArrayList时遇到了麻烦,因为我无法将这样的数据转换为c ++ 向量或std :: string * 。 我想知道如果可能的话,如何在不牺牲太多性能的情况下进行转换。 任何想法,将不胜感激。

如何在Android中使用JNI获取设备ID?

我想通过JNI从c获取IMEI,我使用下面的代码,但遇到了无法获取cls的错误,它总是返回NULL 。我检查了env和context,它们都没事。为什么我不能得到Context类? 我从互联网上搜索,有人说我们应该使用java/lang/Object而不是使用android/context/Context ,我试过这个,它工作,cls不再是NULL,但是当我调用getSystemService时它引起了新的错误,也许是因为普通的java/lang/Object没有这个方法。有人可以帮帮我吗?3Q。 char * get_dev_id(JNIEnv *env, jobject context) { jclass cls = (*env)->FindClass(env, “android/context/Context”); // —————- cls == NULL all the time jmethodID mid = (*env)->GetMethodID(env, cls, “getSystemService”, “(Ljava/lang/String;)Ljava/lang/Object;”); jfieldID fid = (*env)->GetStaticFieldID(env, cls, “TELEPHONY_SERVICE”, “Ljava/lang/String;”); jstring str = (*env)->GetStaticObjectField(env, cls, fid); jobject telephony = (*env)->CallObjectMethod(env, context, mid, str); cls = (*env)->FindClass(env, “android/telephony/TelephonyManager”); […]

jni调用java方法,该方法将自定义java接口作为参数

我正在cocos2d-x平台上开发插件项目,我想编写一些c ++包装器接口,通过jar SDK中的JNI调用java方法。 我知道如何使用JNI来调用静态java方法,但我对java函数中的interface参数感到困惑。 我有一个处理回调的cpp函数指针: typedef void (* MyCallback)(int responseCode, string arg1, set arg2); 我想写一个cpp包装器方法,如: static void MyCpp::setTags(set tags, MyCallback callback) //it use `JNI` to invoke java method setTags(Context context, Set tags, TagCallback callback). 我想在包装器中调用的java方法是 public static void setTags(Context context, Set tags, TagCallback callback) TagCallback是API用户实现的接口。 那么,有可能让TagCallback最终回调到MyCallback函数吗? 换句话说,我可以使用jni将cpp函数指针转换为java接口吗? 谢谢你的耐心 。 编辑:如果用户只想使用java,这里是如何使用setTag : public static void setTags(context, […]

我该如何解释这个JVM错误?

我有一个Java应用程序,它使用一些本机代码,这是错误的。 我想找出故障的位置,但我不确定如何读取hs_err_pid转储文件: Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [libjvm.so+0x256cbc] V [libjvm.so+0x25df69] V [libjvm.so+0x25dbac] V [libjvm.so+0x25e8c8] V [libjvm.so+0x25e49f] V [libjvm.so+0x16fa3e] j br.com.cip.spb.single.SPBRequestApplicationController.processJob(Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ApplicationDataJob;)V+158 j com.planet.core360.cgen.CgenProcessor.processJob(Ljava/lang/String;Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ApplicationDataJob;)V+108 j com.planet.core360.cgen.CgenProcessor.processJob(Ljava/lang/String;Lcom/planet/core360/docgen/ProcessingEnvironment;Lcom/planet/core360/dsmv2/processing/ScheduledJob;)V+7 v ~StubRoutines::call_stub V [libjvm.so+0x17af0c] V [libjvm.so+0x28b9d8] V [libjvm.so+0x17ad3f] V [libjvm.so+0x1a58a3] V [libjvm.so+0x18bc24] C [cgen+0xa6d6] C [cgen+0xae1e] cgen_process_job+0x336 C [cgen+0x10442] C [cgen+0x7714] C [cgen+0x38216] C [cgen+0x3a29d] […]

java.lang.UnsatisfiedLinkError:无法加载eposprint:findLibrary返回null

我正在使用Android Studio。 我在我的应用程序中使用e-POS-Print.jar。 每当我运行代码时,我都会收到此错误: java.lang.ExceptionInInitializerError at com.stc.printer.MyActivity.onCreate(MyActivity.java:48) at android.app.Activity.performCreate(Activity.java:5163) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122) at android.app.ActivityThread.access$600(ActivityThread.java:140) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4895) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.UnsatisfiedLinkError: Couldn’t load eposprint: findLibrary returned null at java.lang.Runtime.loadLibrary(Runtime.java:365) at java.lang.System.loadLibrary(System.java:535) at com.epson.eposprint.Print.(Print.java:18) at com.stc.printer.MyActivity.onCreate(MyActivity.java:48) 我的代码: […]

使用Clojure库捆绑本机JNI共享库

我正在为clojure编写一个涉及本机代码的库。 当我将clojure库部署到公共存储库(如clojars)时,如何捆绑共享库(也称为本机依赖项)? 更多信息: 我的项目结构大致如下: src/ native/ – C code , C Object files and compiled shared libs java/ – Java stuff clojure/ – Clojure stuff 我目前正在使用leineingen。 我试过做: :jvm-opts [~(str “-Djava.library.path=src/native/:” (System/getenv “$LD_LIBRARY_PATH”))] 如果我在项目中,它可以工作。 但是,如果我将此项目作为依赖项包含在内,我将收到UnsatisfiedLink错误。

JNI和Java:ant调用make或者调用ant?

我即将第一次进入JNI(Java Native Interface)世界,提供从平台特定的C / C ++代码到Java的文件系统更改通知。 这是除非有人建议我做错的一些精彩的图书馆。 作为JNI的新手我已经设法在它的接口端和它的库生成方面找到了很多文档,但是我没有找到很多关于构建本机库的知识。 我已经有一个基于ant的已有的Java源代码的现有版本,所以我想弄清楚如果我应该使用ant调用make来创建库,或者如果最好让make在创建后调用ant图书馆? 这两个选项都没有跳出来非常好,但两者似乎都比试图让ant调用编译器来编译代码并直接生成库更好。