Netbeans 11.3和Java 14预览功能

jjjwad0x  于 2022-12-13  发布在  Java
关注(0)|答案(4)|浏览(315)

我使用Java 14作为Netbeans 11.3的默认Java平台(netbeans_jdkhome被设置为我的Java 14 JDK),并尝试在一个简单的Java应用程序中使用预览功能。我将源代码级别设置为14,并将--enable-preview设置为编译器参数。代码编译时没有错误。
然而,当我尝试在Netbeans中运行它时,它抱怨.class文件的主版本是57,而运行时只能运行58个文件和预览功能。
不支持的类版本错误:javapplicationtest 14/JavaApplicationTest 14(类文件版本57.65535)是使用不受支持的预览功能编译的。此版本的Java Runtime仅识别类文件版本58.65535的预览功能
我检查了.class文件的主要版本,它们确实是57。你知道为什么我的项目不能编译到Java 14级吗?我正在使用Ant构建。

pbpqsu0x

pbpqsu0x1#

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

但是,这并不能解决问题,不幸的是,这看起来像是NetBeans 11.3的bug。我用 Java with Ant 项目重现了您的问题,并创建了Bug Report NETBEANS-4049 UnsupportedClassVersionError when running JDK14 code with --enable-preview
如果您需要在NetBeans中使用JDK 14的预览功能,有几种解决方法:

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

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

vfwfrxfs

vfwfrxfs2#

Netbeans项目配置(Java 14)

  • Java 14语言
  • Netbeans〉= 11(当前版本:12.0 LTS)
    可选

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

项目“运行”配置

Java平台

pom.xml文件

* 备注 *

  • 查看maven.编译器。源代码/maven.compiler.target
  • 检查构建-〉插件-〉插件-〉... -〉编译器参数-〉参数
<?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>
e5njpo68

e5njpo683#

不应安装nb-javac(它出现在插件中)。
如果它安装在11.3中,它似乎创建了版本为57而不是58的类文件,运行时会反对,如上所述。

kgsdhlau

kgsdhlau4#

我在Netbeans 15中尝试了此功能。我希望使用外部链接器API,代码完成功能会显示:
MemoryAddress是一个预览API,默认情况下处于禁用状态。(使用--enable-preview可启用预览API)
我把--enable-preview选项放在pom.xml中,它不会改变任何东西。如果我转到项目属性/构建/编译,有一些选项可以选择JDK,但没有办法输入JDK选项。NetBeans提示似乎建议使用--enable-preview,但实际上没有办法这样做。这是NB中的一个bug还是我遗漏了什么?非常令人沮丧,因为我想使用其中的一些功能,我花了我的时间试图让我的代码编辑器工作。我认为这在NB的早期版本中是有效的。

相关问题