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

德米特里Dumanskiy:

我只是试图与Java运行9我的服务器,并得到下一个警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/azureuser/server-0.28.0-SNAPSHOT.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

我想隐藏此警告不增加--illegal-access=deny启动时JVM选项。就像是:

System.setProperty("illegal-access", "deny");

有没有办法做到这一点?

所有的相关答案建议使用JVM选项,我想从代码关闭此。那可能吗?

为了澄清 - 我的问题是关于在类似的问题指出,从代码把这个警告,而不是通过JVM参数/标志。

apangin:

有办法禁止非法访问的警告,但我不建议这样做。

1.简单的方法

由于报警打印到默认的错误流,你可以简单地关闭该流并重定向stderrstdout

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

笔记:

  • 这种方法合并错误和输出流。这可能不是在某些情况下可取的。
  • 你不能重定向警告信息只是通过调用System.setErr,因为到错误流参考保存在IllegalAccessLogger.warningStream早期的JVM引导场。

2.在不改变标准错误复杂的方法

一个好消息是,sun.misc.Unsafe在JDK 9仍然没有访问警告。解决的办法是重新设定内部IllegalAccessLogger不安全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
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 10中的非法反射访问操作警告

如何为非法的反射访问警告引发异常?

如何隐藏在 matplotlib 条形图中没有值的条形

如何隐藏在Java中的枚举值?

BackButton没有隐藏在navigationController中

如何通过网络访问外部硬盘并将其隐藏在本地

如何水平滚动带有溢出的元素:隐藏在移动设备上

有没有一种方法来隐藏在科特林Java方法?

使用iText PDF FontFactory.registerDirectories()和Java 11的非法反射访问操作警告

如何解决Hadoop的警告:一个非法的反射访问操作错误发生在Ubuntu

如何解决警告:Eclipse中org.testng.xml.XMLParser的非法反射访问?

解释如何变量隐藏在这个Java代码工作

如何从工艺获得PID不与Java 9+非法访问的警告?

开始滚动之前如何不将元素隐藏在具有动态高度的固定顶部标题下

UISearchBar barTintColor没有隐藏在iOS 7.1中

轻浮性没有隐藏在桌面上

具有JAVA版本10的JMeter 4:发生了非法的反射访问操作

非法反射访问时,我停止SpringBoot Web应用程序使用Tomcat 9和Java10

有些列隐藏在phpMyAdmin中

MapFragment将所有内容隐藏在片段中

如何从Java进程中隐藏参数?

Java Access Modifiers关键字(私有,默认,受保护,公共或最终,静态等)自动隐藏在eclipse中,但显示在源文件中

单击特定选项卡时,如何隐藏在手风琴菜单项中打开的所有选项卡?

隐藏在C ++和Java中的名称

如何使列隐藏在jsGrid中?

Java Telegram Bot发生了非法的反射访问操作

有没有办法使文本隐藏在输入框中?

如何隐藏在jQuery单击功能后显示的隐藏div

为什么后退按钮没有隐藏在导航控制器中?