Компиляция любого проекта JavaFX в NetBeans возвращает Unsupported major.minor version 52.0

Я вижу ряд подобных вопросов

Но никто с теми же обстоятельствами, что и мои. Я пробовал их решения в любом случае (когда это уместно), и они не помогли.

Я создал приложение JavaFX FXML в NetBeans 8.0.2 и ему пришлось вручную обновить JDK с 1.7 до 1.8, чтобы получить нужные мне функции. Я считаю, что я использовал 1.8.0_52 для JRE и JDK, и проект компилировался в порядке. Затем мой компьютер уведомил меня об обновлении для Java 8. Теперь:

[email protected]:~$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

[email protected]:~$ javac -version
javac 1.8.0_60

и вдруг любой проект Java 8 FXML получает указанное выше сообщение об ошибке во время компиляции, даже стандартное базовое JavaFX FXML Application, которое поставляется с NetBeans. Java 7 FXML будет компилироваться, но 7 отсутствует важные функции. Я начал новые проекты с указанием 8, и я начал новый проект в 7, а затем обновил его до 8: тот же результат.

Я убедился, что исходный/двоичный формат - это JDK 8, в категории "Источники", а платформа Java - JDK 1.8 в категории "Свойства библиотек". Я не могу найти другие настройки для обновления. Я пробовал чистую сборку каждый раз, когда меняю настройку. Ошибка возникает в файле jfx-impl.xml, создаваемом IDE, который слишком велик для публикации целиком, имея более 4000 строк. Я размещаю часть здесь. classpath="${javafx.ant.classpath}" - строка 406, где компилятор сообщает об ошибке:

<target name="-check-ant-javafx-version" depends="-pre-check-ant-javafx-version,
        -set-endorsed-javafx-ant-classpath,-set-javafx-ant-classpath" if="do.check.ant-javafx.version">
    <echo message="ant-javafx.jar.location = ${ant-javafx.jar.location}" level="verbose"/>
    <echo message="javafx.ant.classpath = ${javafx.ant.classpath}" level="verbose"/>
    <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
        uri="javafx:com.sun.javafx.tools.ant"
        classpath="${javafx.ant.classpath}"/>
    <condition property="have-fx-ant-init">
        <typefound name="javafx:com.sun.javafx.tools.ant:init-ant"/>
    </condition>
    <property name="ant-javafx-version-already-checked-in-jfximpl" value="true"/>
    <echo message="have-fx-ant-init = ${have-fx-ant-init}" level="verbose"/>
</target>

Сообщение об ошибке:

/home/chris/Projects/Java/FXMLTimer/nbproject/jfx-impl.xml:3438: The following error occurred while executing this line:
/home/chris/Projects/Java/FXMLTimer/nbproject/jfx-impl.xml:406: 
java.lang.UnsupportedClassVersionError: com/sun/javafx/tools/ant/Permissions : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1136)
    at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1307)
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1362)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1323)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1076)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at org.apache.tools.ant.taskdefs.Definer.addDefinition(Definer.java:579)
    at org.apache.tools.ant.taskdefs.Definer.execute(Definer.java:237)
    at org.apache.tools.ant.taskdefs.Antlib.execute(Antlib.java:180)
    at org.apache.tools.ant.taskdefs.Definer.loadAntlib(Definer.java:428)
    at org.apache.tools.ant.taskdefs.Definer.execute(Definer.java:277)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor169.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
    at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor169.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
BUILD FAILED (total time: 7 seconds)

Есть ли у кого-то идея, что мне не хватает? Есть ли ошибка в NetBeans или в SDK 1.8.0_60 или JRE? Спасибо за ваше время и внимание!

Ответ 1

Вы должны изменить netbeans_jdkhome в файле netbeans.conf.

  • Закройте NetBeans, если он запущен.
  • Найти файл C:\Program Files\NetBeans 7.3\etc\netbeans.conf
  • Измените значение параметра "netbeans_jdkhome" на нужную версию JDK

    Например: netbeans_jdkhome = "C:\Program Files\Java\jdk1.7.0_21"
  • Сохраните файл и снова запустите NetBeans.

Источник + более подробная информация: https://joanpaon.wordpress.com/2013/06/11/how-to-change-netbeans-default-java-platform-2/

Ответ 2

Я un-unstalled JDK 7, un-installed NetBeans, повторно установил NetBeans и перекомпилировал. Больше никаких ошибок. (когда я не установил, я покинул каталог установки и настройки. Когда я снова установил, мне пришлось создать новый каталог, но NetBeans, должно быть, сохранил старые настройки, потому что мне не нужно было изменять настройки или повторно добавлять плагинов). Затем я повторно установил JDK 7 (потому что другие проекты находятся на Java 7), повторно протестирован и продолжает работать.