是否可以反映JDK 10私有方法(SynthLookAndFeel-SynthTableUI类中的方法“ paintGrid”)?

时间:2018-08-20 10:22:05

标签: jtable classloader java-10 synth

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

1 个答案:

答案 0 :(得分:1)

您应该寻找一种不需要使用内部API的解决方案,因为它很脆弱,并且在任何次要的Java更新中都可能失败。就是说...检索<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:padding="10dp" android:orientation="vertical"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/image" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Lorem ipsum dolor sit amet..." android:textSize="20dp" /> <Button android:id="@+id/dismiss" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Dismiss" /> </LinearLayout> 实例后,在其上调用Method-这样您就可以调用它。

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