如何为非法反射访问警告引发异常?例如,考虑以下代码:
import org.apache.commons.lang3.builder.*;
class Test {
public static void main(String[] args) {
System.out.println(ReflectionToStringBuilder.toString(Boolean.TRUE));
}
}
此代码将以下警告输出到 System.err:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.commons.lang3.builder.ReflectionToStringBuilder (file:/Users/brianschack/eclipse-workspace/User%20Libraries/com
mons-lang3-3.7/commons-lang3-3.7.jar) to field java.lang.Boolean.value
WARNING: Please consider reporting this to the maintainers of org.apache.commons.lang3.builder.ReflectionToStringBuilder
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
Boolean.TRUE是一个如此简单的值,以至于我真的不需要RefltionToStringBuilder。但是更复杂的类型(例如HashMap)打印相同的警告。我选择Boolean.TRUE是为了简化这个例子。
当我搜索此警告消息时,我发现了将其报告给包维护者,避免警告或完全禁用它的建议(JDK9:发生了非法的反射访问操作。
我想为警告抛出一个异常,以便获取非法访问发生的堆栈跟踪。然后我可以修改代码以避免导致警告的非法访问。我还想做一个单元测试,在将来检查警告。
我试图根据StackOverflow问题测试打印到System.err,System.out.println()的JUnit测试。这涉及将 System.err 设置为 ByteArrayOutputStream,然后检查内容。但不幸的是,根据如何在java 9中没有JVM参数的情况下隐藏警告“非法反射访问”?,IllegalAccessLogger在JVM引导期间获得了对System.err的引用,然后我才能更改它。
我还尝试关闭System.err,但似乎打印到关闭的流会无声地失败,而不是抛出异常。请注意,以下代码的输出不包含字符串“err-2”:
代码:
class Test {
public static void main(String[] args) {
System.out.println("Start");
System.err.println("err-1");
System.err.close();
System.err.println("err-2");
System.out.println("End");
}
}
输出:
Start
err-1
End
[0] http://mail.openjdk.java.net/pipermail/jigsaw-dev/2017-May/012673.html
[1]http://docs . Oracle . com/javase/9/docs/API/Java/lang/reflect/inaccessibleobjectexception . html
我在Eclipse(版本2019-06)中运行一个项目,它在我的java计算机上运行得很好--“OpenJDK 1.8.0_222” 然而,当我尝试tor在Eclipse(版本2021-3)上的另一台计算机上用java运行该项目时--“OpenJDK版本”1.8.0_292“,它不起作用! 我得到以下错误: 警告:发生非法反射访问操作警告:com.google.gson.internal.bind
如果能帮助我重写一些使用反射的Java代码,以便在Java10上删除编译器中的警告,我将不胜感激: 这就是所讨论的Java方法: 这是GitHub上的问题代码:https://github.com/librepdf/openpdf/blob/master/openpdf/src/main/java/com/lowagie/text/pdf/mappedrandomaccessfile.java#l
JDK11+spring批处理 有人知道那些警告是什么意思吗: 警告:发生了非法的反射访问操作警告:org.springframework.cglib.core.reflectutils$1(jar:file:/users/boru/downloads/spcljr/build/libs/spcljr-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0
我刚买了一台新电脑,决定开始尝试制作《我的世界》模型。超级新,不知道我在做什么,跟着导游走。 在过去的一个小时里,我一直在努力让它工作,我卸载了所有的东西,重新安装了所有的东西,重新启动了我的计算机,手动删除了更改了启动配置的JDK环境,任何我能想到的东西。 我在google上找到的所有其他实例都说我不需要以后安装JDK,我必须有JDK8,但我从来没有另一个版本。 如有任何帮助,不胜感激。
问题内容: 我已经安装了Java 和成功。所有进程运行良好 但是,每当我尝试执行任何命令(如收到此警告)时, 请帮助解决此问题。这是我的〜/ .bashrc文件配置 问题答案: 您不能对这些警告采取任何措施,这与拼图项目和更强的封装能力有关。 基本上有一个称为的类,它是称为“模块”的一部分。该模块“定义”了它输出的内容(其他人可以从中使用什么)以及向谁输出。这也用普通的英语表示这不是供公众使用的-