我有一个名为jniBridge.Calculator的简单Java类,它有一个简单的方法Add(int a, int b)。在使用eclipse构建项目之后,我将项目导出为JAR文件。
然后我在JAR文件上调用proxygen,这产生了一个名为clr的文件夹和另一个名为jvm的文件夹,该文件夹分别包含C#和Java。Proxygen还创建了一个build.cmd和一个.xml文件。
在此之后,我运行了build.cmd,它生成了一个.DLL和.JAR文件。
现在,我想在C#中使用这些文件或其他东西,所以我将.DLL和.JAR文件复制到.NET项目文件夹中,并添加了对.DLL文件的引用,并将.JAR文件设置为Copy Always到输出文件夹,以便它在.EXE文件旁边存在。我还添加了对Jni4Net主库文件jni4net.n-0.8.6.0.dll的引用,并将其主JAR文件jni4net.j-0.8.6.0.jar复制到同一个目录。添加到转储中,我还添加了最初的JAR文件。
在C# Program.cs中,我执行以下操作:
BridgeSetup bs = new BridgeSetup();
bs.AddAllJarsClassPath(".");
Bridge.CreateJVM(bs);
Bridge.RegisterAssembly(typeof(jniBridge.Calculator).Assembly);但是,最后一次调用失败,例外情况如下:
未处理的异常: net.sf.jni4net.jni.JNIException:无法从classLoader sun.misc.Launcher$AppClassLoader@e39a3e加载jnibridge.Calculator的java类-> java.lang.ClassNotFoundException: jnibridge.Calculator
请帮忙!!
发布于 2016-01-18 23:25:14
我遇到了这个问题,并修正了它在我的C#代码中以小写形式设置包名(以及对您的工具中的名称空间的引用)。在您的示例中,您可以尝试确认包名是(确切地) jnibridge (不是JniBridge或其他任何东西)。
https://stackoverflow.com/questions/20111051
复制相似问题