You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Proguard混淆JavaFX自定义控件StringProperty时FXML属性不存在报错问题

错误原因
  1. 规则语法错误:原有-keepclassmembers配置中,匹配方法时未添加括号标识,例如public final java.lang.String *;实际仅匹配String类型的成员字段,完全没有匹配到getText()这类方法,导致属性存取方法未被保护,名称被混淆后FXMLLoader通过反射无法找到对应text属性的操作入口。
  2. 匹配逻辑不严谨:原有规则仅按返回值类型匹配,没有明确适配JavaFX属性的命名规范,即便语法修正也容易出现误匹配或漏匹配的情况。
  3. 构造方法未保留:自定义控件的无参构造方法未明确加入保护规则,FXML反射实例化控件时存在失败风险。
解决方案

将Proguard配置中原有针对Control子类的-keepclassmembers规则替换为以下精准配置即可:

<option>-keepclassmembers class * extends javafx.scene.control.Control {
    <init>();
    *** get*();
    void set*(***);
    javafx.beans.property.Property *Property();
}</option>

规则说明

  • <init>():保留无参构造方法,供FXML反射实例化自定义控件
  • *** get*():匹配并保留所有getter方法(任意返回值、get开头、无参数)
  • void set*(***):匹配并保留所有setter方法(返回值为void、set开头、单个任意类型参数)
  • javafx.beans.property.Property *Property():匹配并保留所有JavaFX属性方法(返回Property子类、以Property结尾、无参数)

该规则可以覆盖所有类型的JavaFX自定义属性(StringProperty、IntegerProperty、BooleanProperty等),无需针对单个属性类型单独配置。

内容的提问来源于stack exchange,提问作者Jawad El Fou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:06:01