1

我用java构建了一个非常小而简单的helloWorld程序(有接口并且在类中有system.lang.out.println(“hello world”)))。我用代理生成包裹它。现在我正在尝试将其附加到 c#(以 meCalc 为例),我收到以下错误:

未处理的异常:net.sf.jni4net.jni.JNIException:无法从 classLoader sun.misc.Launcher$AppClassLoader@c387f44 加载 dt09120958.HelloWorld09120958 的 java 类 ---> java.lang.ClassNotFoundException: dt09120958.HelloWorld09120958 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) --- 内部异常堆栈跟踪结束 --- 在 net.sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env) 在 net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord record, 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(类型类型,布尔绑定 JVM,JNIEnv env) 在 net.sf.jni4net.Bridge.RegisterAssembly(Assembly assembly) 在 netdt09120958.Program.Main(String[] args)在 netdt09120958.Program.Main(String[] args) 的 RegisterAssembly(Assembly 程序集)在 netdt09120958.Program.Main(String[] args) 的 RegisterAssembly(Assembly 程序集)

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

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

4

1 回答 1

1

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

我还发现了这个链接,它可以帮助某人排除故障 http://jni4net.com/troubleshoot.html

于 2017-09-13T03:36:17.480 回答