Javafx Fxml内部类作为属性修复

1、内部类

public class R {
    public final static class string {
        public final static String app_name = "即时通讯";
        public final static String system_tray_menuitem_show = "显示主页面";
        public final static String system_tray_menuitem_exit = "退出";
    }
}

2、Fxml内容


3、报错内容

javafx.fxml.LoadException: Parent element does not support property elements.
/**/target/classes/fxml/*.fxml:34

这是javafx.fxml.FXMLLoader方法

createElement()

对内部类不支持的原因

4、createElement()原生代码片段

  String prefix = xmlStreamReader.getPrefix();
        String localName = xmlStreamReader.getLocalName();
        if (prefix == null) {
            int i = localName.lastIndexOf('.');
//关键在这,这里只取了最后一个类名称,仅有最后一个类的名称后面是无法获取到类的
            if (Character.isLowerCase(localName.charAt(i + 1))) {
                String name = localName.substring(i + 1);

                if (i == -1) {

5、针对笔者的情况提供解决办法(读者可以根据自己的情况再做修改):创建包名javafx.fxml.FXMLLoader,复制javafx.fxml.FXMLLoader内容,修改createElement()方法

 String prefix = xmlStreamReader.getPrefix();
        String localName = xmlStreamReader.getLocalName();
        if (localName.startsWith("R.")) {
            localName = localName.replace(".", "$");
        }
        if (prefix == null) {
            int i = localName.lastIndexOf('.');
            if (Character.isLowerCase(localName.charAt(i + 1))) {
                String name = localName.substring(i + 1);

                if (i == -1) {

你可能感兴趣的:(Java,java,开发语言)