我用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