在场景构建器中打开自定义控件时,UnsupportedClassVersionError

时间:2018-03-03 20:53:11

标签: java intellij-idea javafx scenebuilder

我的自定义课程:

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),并且我已经尝试将版本更改为无效。

2 个答案:

答案 0 :(得分:0)

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

使用Java 9运行它,或者使用目标语言级别8来构建它。

答案 1 :(得分:0)

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

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