我用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
  net.sf.jni4net.jni.JNIEnv.ExceptionTest()在
  net.sf.jni4net.jni.JNIEnv.CallObjectMethodPtr(IJvmProxy obj,MethodId
  methodIdNative,Value [] args)在
  java.lang.ClassLoader.loadClass(String par0)在
  net.sf.jni4net.utils.Registry.LoadClass(字符串名称,ClassLoader
  classLoader,JNIEnv env)-内部异常堆栈跟踪的结尾-
  在net.sf.jni4net.utils.Registry.LoadClass(字符串名称,ClassLoader
  classLoader,JNIEnv env)在
  net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord记录,
  ClassLoader classLoader,JNIEnv env)在
  net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord记录,
  ClassLoader classLoader,JNIEnv env)在
  net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord记录,JNIEnv
  env),位于net.sf.jni4net.utils.Registry.RegisterType(类型类型,
  布尔值bindJVM,JNIEnv env)
  net.sf.jni4net.utils.Registry.RegisterAssembly(组装程序集,
  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();
            }


为什么呢?我在做错什么,该如何解决?

最佳答案

发现java程序包可能不包含任何大写字母。
原始JAR和j4n.jar必须与exe文件位于同一文件夹中。另外,在将它们添加到项目中时,请确保在属性中将其标记为“始终复制”
谢谢@山本哲也

我也找到了此链接,可能会帮助某人进行故障排除
http://jni4net.com/troubleshoot.html

09-28 13:11