首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >希望使用java绑定jnanomsg获取java.lang.ExceptionInInitializerError在android中实现nanomsg。

希望使用java绑定jnanomsg获取java.lang.ExceptionInInitializerError在android中实现nanomsg。
EN

Stack Overflow用户
提问于 2016-03-26 09:54:28
回答 1查看 621关注 0票数 1

我正试图在android中实现nanomsg,并且在这个依赖项之后,我从以下链接获得java绑定:http://niwinz.github.io/jnanomsg/

编译'jnanomsg:jnanomsg:0.4.3‘。它把太阳/jna/libjniDispatch.so找不到。

过了一段时间后,我发现jna所需的".so“文件后来丢失了,我从这个链接中得到了所有必需的".so”文件。

之后,我将app/src/main/jniLibs/armeabi-v7a/libjnidispatch.so文件复制到https://github.com/java-native-access/jna/tree/master/dist

在编译了应用程序之后,我通过System.loadLibrary(“jni分派”)加载了so文件。当我尝试为ReqSocket sock = new ReqSocket();创建一个对象时,我会得到以下错误:

代码语言:javascript
复制
java.lang.ExceptionInInitializerError
                  at nanomsg.Nanomsg.getSymbols(Nanomsg.java:35)
                  at nanomsg.Nanomsg.<clinit>(Nanomsg.java:48)
                  at nanomsg.Nanomsg$constants.<clinit>(Nanomsg.java:51)
                  at nanomsg.reqrep.ReqSocket.<init>(ReqSocket.java:13)
                  at com.example.nanomsg.onClick(MainActivity.java:125)
                  at android.view.View.performClick(View.java:5201)
                  at android.view.View$PerformClick.run(View.java:21163)
                  at android.os.Handler.handleCallback(Handler.java:746)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5443)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
                  Caused by: java.lang.IllegalStateException: The SecurityManager implementation on this platform is broken; you must explicitly provide the class to register
                  at com.sun.jna.Native.getCallingClass(Native.java:1295)
                  at com.sun.jna.Native.register(Native.java:1252)
                  at nanomsg.NativeLibrary.<clinit>(NativeLibrary.java:30)
                  at nanomsg.Nanomsg.getSymbols(Nanomsg.java:35) 
                  at nanomsg.Nanomsg.<clinit>(Nanomsg.java:48) 
                  at nanomsg.Nanomsg$constants.<clinit>(Nanomsg.java:51) 
                  at nanomsg.reqrep.ReqSocket.<init>(ReqSocket.java:13) 
                  at com.example.nanomsg.MainActivity.onClick(MainActivity.java:125) 
                  at android.view.View.performClick(View.java:5201) 
                  at android.view.View$PerformClick.run(View.java:21163) 
                  at android.os.Handler.handleCallback(Handler.java:746) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5443) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)

在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)公司

有人能帮帮我吗?我在这里犯了什么错误。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-28 14:58:02

看起来问题是,没有类参数的Native.register()需要一个上下文类加载器,它可以成功地报告调用类。Android并不提供这种功能。

否则,Native.register()要求您显式地标识要注册的类。不幸的是,如果nanomsg的register位于static块中,甚至不可能加载由nanomsg定义的类。您需要复制它们的类定义(可能是小的或大的),并注册您自己的映射。或者让他们修补他们的register调用来与安卓合作。

另见jna-用户邮件列表

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36233921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档