【发布时间】:2019-01-26 11:05:06
【问题描述】:
我目前正在使用 SynthLookAndFeel 修改我的 GUI,并且我在绘制表格时需要重新绘制表格 Grid,但是此方法在 JDK 中是私有的,并且在通过反射检索“paintGrid”方法时无法调用(它是过于复杂,无法覆盖其他公共方法来绘制表格网格)。
【问题讨论】:
标签: jtable classloader java-10 synth
我目前正在使用 SynthLookAndFeel 修改我的 GUI,并且我在绘制表格时需要重新绘制表格 Grid,但是此方法在 JDK 中是私有的,并且在通过反射检索“paintGrid”方法时无法调用(它是过于复杂,无法覆盖其他公共方法来绘制表格网格)。
【问题讨论】:
标签: jtable classloader java-10 synth
您应该寻找一种不需要使用内部 API 的解决方案,因为这种解决方案很脆弱,并且在任何小的 Java 更新上都可能失败。也就是说...在检索到 Method 实例后,在其上调用 setAccessible(true) - 这将允许您调用它。
在 JDK 9 及更高版本上,这会导致控制台上出现警告,提示您正在使用内部 API - 在未来的 Java 版本(可能早于 12)中,访问将被禁止,您的代码将因异常而失败。要绕过警告和错误,请将命令行标志 --add-opens java.desktop/javax.swing.plaf.synth=ALL-UNNAMED(如果您创建一个,请将 ALL-UNNAMED 替换为您的模块名称)到启动您的应用程序的 java 命令中。
【讨论】: