JNI4Net java in c# , JNIException

本文关键字:JNIException in java JNI4Net | 更新日期: 2023-09-27 18:09:09

我有一个简单的Java类jniBridge。计算器,有一个简单的方法Add(int a, int b).使用eclipse构建项目后,我将项目导出为JAR文件。

然后在JAR文件上调用proxygen,这产生了一个名为clr的文件夹和另一个名为jvm的文件夹,分别包含c#和Java代理。Proxygen也创建了一个构建。CMD和。xml文件。

之后,我运行构建。. 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中,我做了以下操作:


    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.jni。JNIException HResult=-2146233088消息=无法加载用于democalc的Java类。DemoCalc从classLoadersun.misc。发射器AppClassLoader@20eb607d美元= jni4net.n-0.8.8.0来源StackTrace: http://www.net.sf.jni4net.utils . registry。LoadClass(字符串名称,ClassLoader, ClassLoader, JNIEnvnet.sf.jni4net.utils.Registry。RegisterClass (RegistryRecord记录,ClassLoader (ClassLoader, JNIEnv)

请帮忙!!

JNI4Net java in c# , JNIException

您需要确保Java包名是正确的。在你提到的问题中,你的类叫做jniBridge。计算器,后来在异常中,似乎代理正在尝试实例化一个名为democalc的类。DemoCalc,在c#线束类中有这行代码:

Bridge.RegisterAssembly(typeof(DemoCalc).Assembly);

确保正确地命名Java包(就像在另一个问题中提到的那样,使用小写字母),并在c#中使用相同的包和类名。如果包名为jnibridge,类名为DemoCalc,则c#代码应为:

Bridge.RegisterAssembly(typeof(jnibridge.DemoCalc).Assembly);