我在java中构建了一个非常小而简单的helloWorld程序(有接口,类中有system.lang.out.println(" hello world")))。我用代理包裹它。现在我试图将它附加到c#(通过meCalc示例)我收到以下错误:
未处理的异常:net.sf.jni4net.jni.JNIException:无法加载java 来自classLoader的dt09120958.HelloWorld09120958的类 sun.misc.Launcher$AppClassLoader@c387f44 ---> java.lang.ClassNotFoundException:dt09120958.HelloWorld09120958 at at net.sf.jni4net.jni.JNIEnv.ExceptionTest()at net.sf.jni4net.jni.JNIEnv.CallObjectMethodPtr(IJvmProxy obj,MethodId methodIdNative,Value [] args)at java.lang.ClassLoader.loadClass(String par0)at net.sf.jni4net.utils.Registry.LoadClass(String name,ClassLoader classLoader,JNIEnv env)---内部异常堆栈跟踪结束--- at net.sf.jni4net.utils.Registry.LoadClass(String name,ClassLoader) classLoader,JNIEnv env)at net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord记录, ClassLoader classLoader,JNIEnv env)at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord记录, ClassLoader classLoader,JNIEnv env)at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord record,JNIEnv env)at net.sf.jni4net.utils.Registry.RegisterType(Type type, 布尔bindJVM,JNIEnv env)at net.sf.jni4net.utils.Registry.RegisterAssembly(Assembly assembly, net.sf.jni4net.Bridge.RegisterAssembly(Assembly。)中的布尔bindJVM) 在netdt09120958.Program.Main(String [] args)
我的c#代码:
static void Main(string[] args)
{
var bridgeSetup = new BridgeSetup();
bridgeSetup.AddAllJarsClassPath(".");
Bridge.CreateJVM(bridgeSetup);
Bridge.RegisterAssembly(typeof(HelloWorld09120958).Assembly);
IHelloWorld09120958 calc = new HelloWorld09120958();
calc.SayHello();
Console.ReadKey();
}
为什么会这样?我做错了什么,如何解决它?
答案 0 :(得分:1)
发现java包可能不包含任何大写字母。 原始JAR和j4n.jar必须与exe文件位于同一文件夹中。将它们添加到项目中时,请确保在属性中将它们标记为"始终复制" 谢谢你@Tetsuya Yamamoto
我也找到了这个可能有助于排除故障的链接 http://jni4net.com/troubleshoot.html