【问题标题】:Is it possible to reflect over a JDK 10 private method (SynthLookAndFeel - the method "paintGrid" in SynthTableUI class)?是否可以反映 JDK 10 私有方法(SynthLookAndFeel - SynthTableUI 类中的方法“paintGrid”)?
【发布时间】:2019-01-26 11:05:06
【问题描述】:

我目前正在使用 SynthLookAndFeel 修改我的 GUI,并且我在绘制表格时需要重新绘制表格 Grid,但是此方法在 JDK 中是私有的,并且在通过反射检索“paintGrid”方法时无法调用(它是过于复杂,无法覆盖其他公共方法来绘制表格网格)。

【问题讨论】:

    标签: jtable classloader java-10 synth


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多