2

我使用 Java 14 作为 Netbeans 11.3 的默认 Java 平台(netbeans_jdkhome 设置为我的 Java 14 JDK)并尝试在简单的 Java 应用程序中使用预览功能。我将源级别设置为 14 并将 --enable-preview 设置为编译器参数。代码编译没有错误。

但是,当我尝试在 Netbeans 中运行它时,它抱怨 .class 文件的主要版本是 57,而运行时只能很好地处理 58 个文件和预览功能。这是错误:

java.lang.UnsupportedClassVersionError:javaapplicationtest14/JavaApplicationTest14(类文件版本 57.65535)使用不受支持的预览功能编译。此版本的 Java 运行时仅识别类文件版本 58.65535 的预览功能

我检查了 .class 文件的主要版本,它们确实是 57。任何想法为什么我的项目不会编译成 Java 14 级别?我正在使用 Ant 构建。

4

3 回答 3

4

除了将--enable-preview设置为编译器选项外,还应在运行代码时将其设置为VM 选项:

在此处输入图像描述

但是,这并不能解决问题,不幸的是,这看起来像是一个 NetBeans 11.3 错误。我用 Ant项目重现了您的 Java 问题,并在使用 --enable-preview 运行 JDK14 代码时创建了错误报告NETBEANS-4049 UnsupportedClassVersionError 。

如果您需要在 NetBeans 中使用 JDK 14 的预览功能,有几个解决方法:

  • 从命令行(使用--enable-preview作为选项)而不是在 NetBeans 中运行您的应用程序。在 NetBeans 中因UnsupportedClassVersionError而失败的相同代码在该环境中运行良好,这强烈表明 NetBeans 忽略了--enable-preview运行时选项。
  • 创建一个带有 Maven 的 Java项目,而不是一个带有 Ant 的 Java项目。然后,您可以运行使用 NetBeans 中的预览功能的代码。

如果您仍有问题,请使用更多详细信息更新您的问题。

于 2020-03-21T19:09:43.170 回答
2

Netbeans 项目配置 (Java 14)

  • 爪哇 14
  • Netbeans >= 11(当前:12.0 LTS)

可选

可以使用sdkman或设置默认 java 路径:

  /opt/<jdk-install-dir>
C:\Program Files\<jdk-install-dir>

项目“运行”配置

项目运行配置

Java平台

构建/编译

pom.xml

笔记

  • 检查 maven.compiler.source / maven.compiler.target
  • 检查 build->plugins->plugin->...-> compilerArgs -> arg
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>Demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>14</maven.compiler.source>
        <maven.compiler.target>14</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>--enable-preview</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

于 2020-07-28T03:37:40.893 回答
0

不应安装 nb-javac(它出现在插件中)。

如果它安装在 11.3 中,它似乎会创建版本为 57 而不是 58 的类文件,然后运行时反对,如上所述。

于 2020-04-28T12:56:02.180 回答