首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNI4Net java in c#,JNIException

JNI4Net java in c#,JNIException
EN

Stack Overflow用户
提问于 2015-08-21 11:10:49
回答 1查看 2.3K关注 0票数 0

我有一个名为jniBridge.Calculator的简单Java类,它有一个简单的方法Add(int,int )。在使用eclipse构建项目之后,我将项目导出为JAR文件。

然后我在JAR文件上调用proxygen,这产生了一个名为clr的文件夹和另一个名为jvm的文件夹,该文件夹分别包含C#和Java。Proxygen还创建了一个build.cmd和一个.xml文件。

在此之后,我运行了build.cmd,它生成了一个.DLL和.JAR文件。

现在,我希望在C#中使用这些文件或其他东西,因此我将.DLL和.JAR文件复制到.NET项目文件夹中,并添加了对.DLL文件的引用,并将.JAR文件设置为始终复制到输出文件夹,以便它沿着.EXE文件存在。我还添加了对Jni4Net主库文件jni4net.n-0.8.8.0.dll的引用,并将其主JAR文件jni4net.j-0.8.8.0.jar复制到同一个目录中。添加到转储中,我还添加了最初的JAR文件。

在C# Program.cs中,我执行以下操作:

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var bridgeSetup = new BridgeSetup();
        bridgeSetup.Verbose = true;
        bridgeSetup.AddAllJarsClassPath("./");
        bridgeSetup.IgnoreJavaHome = true;
        //bridgeSetup.AddAllJarsClassPath(@"C:\Program Files\Java\jre7");
        Bridge.CreateJVM(bridgeSetup);
        Bridge.RegisterAssembly(typeof(DemoCalc).Assembly);
        ICalc calc = new DemoCalc();
        int result = calc.MySuperSmartFunctionIDontHaveInJava("Answer to the Ultimate Question of Life, the Universe, and Everything");
        Console.WriteLine("Answer to the Ultimate Question is : " + result);
    }

但是,最后一次调用失败,例外情况如下:

net.sf.jni4net.utils.Registry.LoadClass(String =-2146233088 net.sf.jni4net.jni.JNIException =-2146233088 Message=无法从classLoader sun.misc.Launcher$AppClassLoader@20eb607d Source=jni4net.n-0.8.8.0 StackTrace加载democalc.DemoCalc java类:在sun.misc.Launcher$AppClassLoader@20eb607d name,ClassLoader classLoader,JNIEnv env)在sun.misc.Launcher$AppClassLoader@20eb607d record,ClassLoader classLoader,JNIEnv env)

请帮忙!!

EN

回答 1

Stack Overflow用户

发布于 2016-01-19 00:20:47

您需要确保Java包名是正确的。在前面提到的问题中,您的类名为jniBridge.Calculator,在例外情况下,代理似乎试图实例化一个名为democalc.DemoCalc的类,而在C#工具类中,您有以下代码:

代码语言:javascript
复制
Bridge.RegisterAssembly(typeof(DemoCalc).Assembly);

确保您正确地命名了Java (使用小写,就像在另一个question中提到的那样),并在您的C#工具中使用相同的包和类名。如果包名为jnibridge,并且类名为DemoCalc,那么C#代码应该是:

代码语言:javascript
复制
Bridge.RegisterAssembly(typeof(jnibridge.DemoCalc).Assembly);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32138826

复制
相关文章

相似问题

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