jni4net c#with java in jni4net java.lang.ClassNotFoundException

时间:2017-09-12 07:43:06

标签: java c# jni4net

我在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();
            }

为什么会这样?我做错了什么,如何解决它?

1 个答案:

答案 0 :(得分:1)

发现java包可能不包含任何大写字母。 原始JAR和j4n.jar必须与exe文件位于同一文件夹中。将它们添加到项目中时,请确保在属性中将它们标记为"始终复制" 谢谢你@Tetsuya Yamamoto

我也找到了这个可能有助于排除故障的链接 http://jni4net.com/troubleshoot.html