Java 16环境下Netbeans构建的jar包运行时方法中途停止无异常如何解决
排查解决思路
优先验证异常是否被吞
你当前代码虽然catch了Exception,但自定义的log.logException方法可能因为日志配置、模块化权限问题无法正常输出异常。先将catch块代码临时替换为:catch (Exception e) { e.printStackTrace(); System.err.println("异常类型:" + e.getClass().getName() + ",异常信息:" + e.getMessage()); }直接用命令行运行jar包,查看控制台输出的具体异常信息,这是定位问题的核心依据。
排查jlink自定义JRE的模块缺失问题
你使用的PBKDF2WithHmacSHA256、AES加密算法依赖JDK的加密模块,jlink构建自定义JRE时如果遗漏了相关模块,会触发NoSuchAlgorithmException。请检查你构建jlink时添加的模块列表,确认已包含以下模块:java.crypto(基础加密接口)jdk.crypto.cryptoki(包含PBKDF2、AES等常用算法实现)jdk.crypto.ec(可选,部分加密衍生算法依赖)
可以直接运行jre/bin/java --list-modules查看你的自定义JRE包含的模块,确认上述模块存在。
检查模块化应用的配置
作为模块化应用,请确认你的module-info.java中已声明对应依赖:requires java.crypto; // 如果用到了其他加密扩展模块,也需要补充声明 requires jdk.crypto.cryptoki;同时确认日志相关模块的访问权限配置正确,避免日志输出被模块访问规则拦截。
排除Launch4j的影响
先跳过Launch4j生成的exe,直接用你构建的自定义JRE的java命令运行jar包:你的自定义JRE路径/bin/java -jar 你的应用包名.jar如果命令行运行正常,说明问题出在Launch4j的配置上,检查Launch4j是否正确指定了自定义JRE路径、运行参数是否和Netbeans运行时的参数一致。
确认加密权限配置
检查自定义JRE路径下的conf/security/java.security文件,确认crypto.policy配置为unlimited,避免高强度加密算法被权限限制拦截。
内容的提问来源于stack exchange,提问作者amnesiac
相关产品推荐
相关产品推荐

