我有一个名为 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);
但是,最后一次调用失败并出现以下异常:
Unhandled Exception: net.sf.jni4net.jni.JNIException: Can't load java class for jnibridge.Calculator from classLoader sun.misc.Launcher$AppClassLoader@e39a3e ---> java.lang.ClassNotFoundException: jnibridge.Calculator
请帮忙!!
最佳答案
我遇到了这个问题,并修复了它在我的 Java 代码中将包名称设置为小写(以及对 C# 工具中命名空间的引用)。在您的情况下,您可以尝试确认包名称(准确)是 jnibridge(不是 JniBridge 或其他任何名称)。
关于java - JNI4Net C# 到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111051/