我想从c#代码调用java API。我的Java API是一个与多个第三方库捆绑在一起的jar文件。我正在尝试使用IKVM和JNI4Net。我能够调用几个java函数,但是当代码依赖于第三方库时,它会显示错误:在dll中发生NoClassDefFoundError'。我的问题是可以使用这种基于JNI的工具从C#代码执行java应用程序(它依赖于许多第三方库)吗?
答案 0 :(得分:0)
如果不是jni4net专家,我有一些经验。
使用jni4net,您需要使用BridgeSetup并调用其AddClassPath()
方法之一来构建包含第三方库的类路径。
例如,像这样:
namespace My.Lib
{
using System;
using net.sf.jni4net;
public static class MyClass
{
public static void Init()
{
// create the setup and register the Java classpath
BridgeSetup bridgeSetup = new BridgeSetup(true);
bridgeSetup.AddClassPath("lib/myLib1.jar");
bridgeSetup.AddClassPath("lib/myLib2.jar");
// add others ...
// check the actual classpath we got
Console.WriteLine("registered classpath : ");
foreach (String s in bridgeSetup.JVMCLassPath) Console.WriteLine(s);
// now create the JVM
Bridge.CreateJVM(bridgeSetup);
}
}
}
答案 1 :(得分:0)
使用IKVM,我可以通过将Java项目构建到单个JAR中来实现这一点。 我使用Netbeans作为我的IDE,并按照本文中的步骤操作 http://www.oracle.com/technetwork/java/javamail/single-jar-141905.html