【问题标题】:UnsupportedClassVersionError when opening custom controls in scene builder在场景构建器中打开自定义控件时出现 UnsupportedClassVersionError
【发布时间】:2018-08-11 20:20:38
【问题描述】:

我的自定义类:

public class IntegerField extends TextField {
    public IntegerField() {
        super();
        restrictToNumbersOnly();
    }

    public IntegerField(String text) {
        super(text);
        restrictToNumbersOnly();
    }
    public void restrictToNumbersOnly() {
         // Irrelevant
    }
}

然后我尝试像这样添加这个自定义类:

<IntegerField fx:id="example" />

IntelliJ 的 Scene Builder 输出此错误:

java.lang.UnsupportedClassVersionError: path/IntegerField has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0

我已尝试搜索此错误,但没有找到任何解释为什么这不起作用。我发现的示例表明应该可以从控件类扩展,并将其直接导入 fxml 文件,并且确实如此。它在运行程序时完美运行,问题在于场景构建器。

我意识到这是 Java 版本问题,但整个项目设置为 Java 9 (53),我尝试更改版本无济于事。

【问题讨论】:

标签: java intellij-idea javafx scenebuilder


【解决方案1】:

我还没有找到内置 Scene Builder 的修复方法,但我找到了使用以下步骤在外部 Scene Builder 上的解决方法:

  • 安装 Gluon Scene Builder。
  • 将 NumberField 移动到它自己的包中。
  • 制作仅包含 NumberField 的自定义 fxml。
  • 将 JavaFX 应用程序添加到包中。
  • 将包定义为工件。
  • 构建工件。
  • 在 Gluon Scene Builder 中添加自定义 JAR。

【讨论】:

    【解决方案2】:

    您已经使用 Java 9 的目标级别编译了您的类(因此生成了 53 的类版本),但您正尝试使用 Java 8 运行它。

    要么使用 Java 9 运行它,要么使用 8 级目标语言构建它。

    【讨论】:

    • 感谢您的回答,项目设置设置为Java 9,所以我不知道从哪里开始寻找这个版本不匹配。
    • @xZyph 大概在您看到它设置为 Java 9 的同一个地方?
    • 哦对了,我大概可以将项目级别设置为 8,但是为什么在 9 时不起作用?我的 Scene Builder 是否已过时,或者我对此有单独的设置?
    • 它与您的场景生成器无关。您用来执行它的 Java 8 二进制文件无法读取 Java 9 字节码。
    • 项目等级降到8级后仍然报错。
    猜你喜欢
    • 2014-07-28
    • 2015-07-04
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多