在 NetBeans returns 中编译任何 JavaFX 项目 major.minor 版本 52.0 不受支持

Compiling any JavaFX project in NetBeans returns Unsupported major.minor version 52.0

我看到了很多类似的问题

但是none跟我的情况一样。无论如何,我已经尝试过他们的解决方案(相关时)但他们没有帮助。

我在 NetBeans 8.0.2 中创建了一个 JavaFX FXML 应用程序,必须手动将 JDK 从 1.7 升级到 1.8 才能获得我想要的功能。我相信我对 JRE 和 JDK 使用 1.8.0_52 并且项目编译正常。然后我的电脑通知我 Java 8 的更新。现在:

mc@MC-Desktop:~$ 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)

mc@MC-Desktop:~$ javac -version
javac 1.8.0_60

突然间,任何 Java 8 FXML 项目在编译期间都会收到上述错误消息,即使是 NetBeans 附带的标准基本 JavaFX FXML Application。 Java 7 FXML 可以编译,但 7 缺少重要功能。我已经开始了指定 8 的新项目,并且我已经在 7 中开始了一个新项目,然后将其升级到 8:相同的结果。

我确保 Source/Binary 格式是 JDK 8,在 Sources 类别中,Java Platform 在 Libraries 类别中设置为 JDK 1.8项目的属性。我找不到要更新的其他设置。每次更改设置时,我都尝试了一个干净的构建。该错误发生在 IDE 生成的文件 jfx-impl.xml 中,该文件太大而无法完整 post,超过 4000 行。我post这里有一部分。 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 或 1.8.0_60 SDK 或 JRE 中是否存在错误?感谢您的时间和考虑!

我卸载了JDK 7、卸载了NetBeans,重新安装了NetBeans,重新编译。没有错误了。 (当我卸载时,我保留了安装目录和设置。当我重新安装时,我不得不创建一个新目录,但 NetBeans 必须保留旧设置,因为我不需要更改首选项或重新添加插件)。然后我重新安装了JDK 7(因为其他项目在Java 7),重新测试仍然有效。

您必须更改 netbeans.conf 文件中的 netbeans_jdkhome。

  • 如果是 运行,请关闭 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/