是否可以反映 JDK 10 个私有方法(SynthLookAndFeel - SynthTableUI class 中的方法 "paintGrid")?

Is it possible to reflect over a JDK 10 private method (SynthLookAndFeel - the method "paintGrid" in SynthTableUI class)?

我目前正在使用 SynthLookAndFeel 修改我的 GUI,我需要在绘制 table 时重新绘制 table 网格,但此方法在 JDK 中是私有的,不能当通过反射检索 "paintGrid" 方法时调用(覆盖其他 public 方法来绘制 table 网格太复杂了)。

您应该寻找不需要使用内部 API 的解决方案,因为它很脆弱并且可能会在任何次要 Java 更新时失败。那就是说......在检索 Method 实例后,对其调用 setAccessible(true) - 这将允许你调用它。

在 JDK 9 及更高版本上,这会导致在控制台上发出警告,提示您正在使用内部 API - 在未来的 Java 版本(可能早至 12)中,将禁止访问并且您的代码将失败并出现异常。要绕过警告和错误,请将命令行标志 --add-opens java.desktop/javax.swing.plaf.synth=ALL-UNNAMED(如果创建模块,请将 ALL-UNNAMED 替换为模块名称)添加到启动应用程序的 java 命令中。