栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在没有JVM参数的情况下在Java 9中隐藏警告“非法反射访问”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在没有JVM参数的情况下在Java 9中隐藏警告“非法反射访问”?

有几种方法可以禁用非法访问警告,尽管我不建议您这样做。

1.简单的方法

由于警告已打印到默认错误流,因此您只需关闭此流并重定向

stderr
到即可
stdout

public static void disableWarning() {    System.err.close();    System.setErr(System.out);}

笔记:

  • 这种方法合并了错误流和输出流。在某些情况下,这可能不是理想的。
  • 您不能仅通过调用来重定向警告消息
    System.setErr
    ,因为错误流的引用
    IllegalAccessLogger.warningStream
    在JVM引导程序的早期就保存在字段中。

2.无需更改标准错误的复杂方法

一个好消息是,

sun.misc.Unsafe
仍可以在JDK 9中访问它而不会发出警告。解决方案是在
IllegalAccessLogger
Unsafe
API的帮助下重置内部。

public static void disableWarning() {    try {        Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");        theUnsafe.setAccessible(true);        Unsafe u = (Unsafe) theUnsafe.get(null);        Class cls = Class.forName("jdk.internal.module.IllegalAccessLogger");        Field logger = cls.getDeclaredField("logger");        u.putObjectVolatile(cls, u.staticFieldOffset(logger), null);    } catch (Exception e) {        // ignore    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号