.NET使用Javonet运行示例报Initializing JVM failed如何解决
「Initializing JVM failed」异常排查解决步骤
- 确认JDK路径配置正确:检查
Activate方法第三个参数传入的JDK路径和你本地实际安装路径完全一致,示例中默认填写的@"C:\Program Files (x86)\Java\jdk1.8.0_144"仅为参考,必须替换为你的真实JDK路径 - 确认JDK与.NET项目架构匹配:如果你的.NET项目目标平台为x86/开启了「优先32位」选项,必须使用32位JDK;如果目标平台为x64,必须使用64位JDK,架构不匹配是触发该异常最常见的原因
- 确认激活凭证有效:
Activate方法前两个参数需要填入你申请的真实授权邮箱和密钥,无效凭证会导致初始化阶段连带JVM启动失败 - 确认JDK版本适配:优先使用JDK8、JDK11这类长期支持版本,避免使用非LTS的高版本JDK引发兼容性问题
- 确认依赖文件完整:确保
SampleJavaJar.jar文件放在程序运行目录下,Javonet核心运行依赖无缺失
修正后参考代码
/// 本示例展示如何创建Java类实例、调用方法以及获取/设置字段 static void Main(string[] args) { Console.WriteLine("正在激活Javonet..."); JavonetBridge.Javonet.Activate("你的注册邮箱", "你的授权密钥", @"你本地的JDK实际安装路径"); JavonetBridge.Javonet.AddReference(@"SampleJavaJar.jar"); // 创建Java类实例 var sampleClass = JavonetBridge.Javonet.New("SampleJavaClass"); // 调用实例方法 String res = sampleClass.Invoke("SayHello", "Student"); Console.WriteLine("Java方法'SayHello'返回结果:" + res); // 设置字段值 sampleClass.Set("numberA", 4); sampleClass.Set("numberB", 8); // 获取字段值 var a = sampleClass.Get("numberA"); Console.WriteLine("字段'numberA'的值为:" + a); var b = sampleClass.Get("numberB"); Console.WriteLine("字段'numberB'的值为:" + b); // 调用返回int类型的实例方法 int result = sampleClass.Invoke("SumAandB"); Console.WriteLine("A与B的和为:" + result); // 调用传入int参数的方法 int multiplyResult = sampleClass.Invoke("Multiply", 10, 4); Console.WriteLine("10与4的乘积结果为:" + multiplyResult); Console.WriteLine("\n\n恭喜!你已成功从.NET中调用Java代码,是不是很简单?"); Console.ReadLine(); }
内容的提问来源于stack exchange,提问作者Görkem ÖNER
相关产品推荐
相关产品推荐

