我有一个名为 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 文件设置为始终复制到输出文件夹,所以它与 .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 消息=无法从 classLoader sun.misc.Launcher$AppClassLoader@20eb607d 为 democalc.DemoCalc 加载 java 类 Source=jni4net.n-0.8.8.0 StackTrace:在 net. sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env) net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord record, ClassLoader classLoader, JNIEnv env)
任何帮助请!