问题标签 [java-11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1338 浏览

java - 如何使用 JDK 11 向 Collection.toArray() 提供生成器函数?

我已升级 Eclipse Photon 4.8 ( http://download.eclipse.org/eclipse/downloads/drops4/S-4.9M2-201808012000/ ) 以支持 JDK 11 ( https://marketplace.eclipse.org/content/java- 11-support-eclipse-photon-49)。它似乎工作正常(版本:4.9 Build id:I20180801-2000)。

toArray()在 JDK 11中,Java.util.Collection 中有一个新的方法覆盖:

这是一种默认方法,但不会被覆盖。它所做的只是将提供的生成器函数(使用硬编码的零参数)返回的值传递给另一个覆盖toArray(),然后将集合的内容作为数组返回。

如该方法的 Javadoc 中所述,可以像这样调用它:

Collection<String>这工作正常,并返回对应于 的适当长度的 String 数组。

Javadoc 还声明“默认实现使用零调用生成器函数,然后将结果数组传递给 toArray(T[]) ”。

如果我提供自己的生成器函数,它确实会被调用(如println()控制台输出所示),但其apply()方法的返回值似乎被忽略了。就好像我调用toArray(String[]::new)了不管我的生成器函数返回的数组的内容。

这是MCVE:

这是运行 MCVE 产生的控制台输出:

array1:[这个,是,一个,列表,的,字符串]

intFunc: 大小: 0

intFunc:要返回的数组:[A, B, C]

array2:[这,是,一个,列表,的,字符串]

intFunc: 大小: 4

intFunc:要返回的数组:[A, B, C, D]

array3:[这个,是,一个,列表,的,字符串]

输出表明我的生成器函数做什么并不重要——它返回的数组没有被使用。

我的问题是如何获得这个新的实现toArray()来使用我的生成器函数返回的数组,或者我是否正在尝试一些不可能的事情?


根据评论和 Nicolai 的回答进行更新:

我的示例代码的问题不在于生成器,而在于我的测试用例。它们碰巧导致生成器返回一个元素少于集合的数组,因此分配了一个新数组,以准确保存集合中元素的数量。

返回大于集合的数组的测试用例按预期工作。例如这段代码:

给出以下控制台输出:

intFunc: 大小: 9

intFunc:要返回的数组:[A, B, C, D, E, F, G, H, I]

array4: [this, is, a, list, of, strings, null, H, I]

SO 问题Collections emptyList/singleton/singletonList/List/Set toArray解释了为什么返回的数组中有一个空值。

0 投票
0 回答
247 浏览

java - Maven JavaDoc 插件无法解析 XML

我试图使用 maven-javadoc-plugin 和自定义 doclet 生成 Javadoc。我正在使用 JDK 11,并且已经实现了 Doclet 接口的方法。但是,在其中一种方法中,我试图解组 XML 文件。我收到以下错误:

javax.xml.bind.JAXBException:在模块路径或类路径上找不到 JAXB-API 的实现。

我已将 javadoc-plugin 配置如下:

我应该怎么做才能解决这个问题?

0 投票
1 回答
624 浏览

javafx - 为 Java 8 构建的 JavaFX 应用程序 - 如何继续使用 Java 11 运行?

我最近了解到 JavaFX 不包含在 Java 11 中,并且有一个关于它如何工作的问题。

现在,我维护一个以 Java 8 为目标的应用程序,主要使用 Swing,但也使用一些 JavaFX,并且拥有非开发人员用户群。其中一些用户使用的是较旧的操作系统,所以我想继续以 Java 8 为目标。

然而,Java 11 下个月发布,我担心一些使用较新操作系统的用户将升级到 Java 11,并且应用程序的 JavaFX 组件将停止工作。

那么,如果您希望继续以 Java 8 为目标,但让 JavaFX 为安装 JRE 11 的人工作,那么最好的前进道路是什么?我看到了几个选项,没有一个是完美的:

  • 需要单独安装 JavaFX。如果是这样,我需要知道哪个版本 - 最有可能来自https://gluonhq.com/products/javafx/的特定于操作系统的 SDK ?不理想,因为它是另一个安装,但我已经为那些没有安装 Java 的人提供了安装说明。
  • 捆绑 JRE 和 JavaFX,并具有强制使用该 JRE 的启动脚本。不理想,因为下载大小会急剧增加,并且每个操作系统都需要单独下载,但我之前制作过捆绑 JRE 的发行版。
  • 如果检测到 Java 11+,则回退到 Swing 而不是 JavaFX。我可能会这样做,因为我的应用程序一开始是 Swing 并且只有一小部分已迁移,但它也没有吸引力,因为我添加的更新的、JavaFX 特定的功能将会丢失。
  • 尝试将 JavaFX 运行时包含为 .jar 文件并手动将其加载到类路径中,也许只有在检测到 Java 11+ 的情况下?

我很好奇你的想法是什么,如果有更好的选择我忽略了。当我采用 JavaFX 时,我没想到有一天它会从 JRE 中删除!

0 投票
2 回答
8225 浏览

maven - Java11 / JavaFX 和 Maven 不会在 NetBeans IDE 9 之外运行

根据活动 JDK 中未找到的 JavaFX 部署库

我使用了 José Pereda Maven 方法,它在 NetBeans 中运行良好,但是一旦我尝试使用“java -jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar”在外部运行它,我就会收到以下错误
“错误:JavaFX缺少运行时组件,并且是运行此应用程序所必需
的”“md.mavenproject1.MainApp”只是一个临时名称,而我试图弄清楚这一点。
我的 pom 文件如下所示:

我的 nbactions.xml 文件看起来像:

您能给我的任何帮助都会有很大帮助,因为我正在考虑通过 JavaFX 的变化将我的高中编程孩子从 ant 切换到 maven,但他们希望能够将那里的程序带回家使用。我在我的系统上运行 OpenJDK 11。
**编辑**
我将运行程序的行更改为:

现在我得到:

我虽然使用 maven 的依赖项,但我不需要使用本地 jdk。任何人都可以提供的任何帮助都会非常有帮助。如果我取出依赖项并使用 Oracle java 10 jdk 程序并在 netbeans 外部运行,但使用 java 11 它只能在内部运行。请帮忙。

** 编辑 **

通过编辑 pom 文件并删除:

而是使用:

我现在可以更改启动行以使用我添加的附加 JavaFX 库,而不必使用我下载的 SDK。

我想让它包含 jre 而不是使用本地的。如果有人知道这将是多么棒。

0 投票
6 回答
111765 浏览

java - 如何在 Java 11 中将 JavaFX 运行时添加到 Eclipse?

我收到以下错误,因为 Java 11 将 JavaFX 作为最新版本的一部分排除在外。

那么如何在 Java 11 中将 JavaFX 添加到 Eclipse 中呢?谢谢。

0 投票
5 回答
3576 浏览

java - 如何让 Graal SDK 包在没有 Maven 的情况下工作?

我正在开发一个需要执行 JavaScript 的 Java 应用程序。Nashorn JS 引擎即将被弃用,取而代之的是使用 GraalVM 的 Graal SDK 提供的一组 API。本质上执行多种语言的虚拟机。

至少我是这么认为的。所以我花了一天时间试图让它工作。我下载了使用 JDK 8 的 GraalVM rc6。我使用 IntelliJ IDEA 并将 GraalVM 添加为新的 JDK。我觉得很奇怪我应该添加一个虚拟机作为开发工具包,但我知道它是基于 JDK 8 的,所以我可以接受。

而且问题与其他问题不同,我无法让新软件包正常工作。我的 IDE 告诉我它无法解决它们。

实际上,没有一个 org.graalvm 包可以解决。

所以我下载了 JDK 11 build 28,因为据我所知,自 build 20 起 JDK 11 就带有 GraalVM。

实际上,在这种情况下,可以找到一些包,但远远少于预期:例如 org.graalvm.polyglot 仍然无法解析。

最后,我尝试从 Maven 添加 Graal SDK 并解决了这些包。现在我在运行时遇到异常:

在类路径上找不到语言和多语言实现。确保 truffle-api.jar 在类路径中。

我认为前两种情况的问题实际上是没有获取 GraalVM JDK,但即使这样它也会抛出异常。

有经验的能解释一下吗?

0 投票
1 回答
1394 浏览

servlets - JAVA 迁移 1.6 到 1.8 和 11

我有一个基于 EJB 框架、JSP 和 Servlet 的项目。到目前为止,它在 Java 1.6 上运行良好,但自从 Oracle 宣布停止支持以来,它迫使我们加快进程以迁移到 1.8 和 11 个 JAVA 版本。我的问题是——

1) 由于从 Java EE 6 开始不推荐使用实体 bean。考虑到时间、工作量和性能,最好的选择是什么?

2) 将 EJB 2.2 迁移到 3.2 是否是一个好计划,或者我们应该使用任何其他框架?

3) SOAP、JAXB 的最佳替代品是什么?

4)我们应该将当前项目移动到 SPRING 和 REST 吗?如果是/否,那为什么?

0 投票
1 回答
2376 浏览

java - Java兼容编译模式

我面临以下难题。我目前正在 32 位和 64 位 Windows 机器上部署 Java 8 应用程序。

由于 Java 8 即将达到其 EoL,我开始面临下一步该做什么的非常困难的问题。

由于 Oracle 不会提供其较新 Java 版本的 32 位版本,因此我现在必须坚持使用 8,尽管通过转向 OpenJDK 的产品,他们似乎承诺支持比 8 的 EoL 更远的产品。为此,我还将作为 VM(提供 32 位版本)迁移到 OpenJ9。

我的问题是以下。我开始考虑迁移到 Java 11。我想知道,是否可以使用该 jdk 以不使用任何 11 个特定功能为代价以兼容模式和目标版本 8 进行编译?

编译后的代码也可以在这样的组合中正确运行,即兼容编译的 Java 11 代码并部署到在 32 位上运行的环境中吗?

我还想知道对 Java 11 的兼容性支持是什么。

0 投票
1 回答
5965 浏览

maven - 带有 moditect 和 Java 11 的 JavaFX Maven

根据是否有办法在使用 maven-jlink-plugin 时添加 maven 依赖项? 有没有人在 Java 11中将 ModiTect Maven 插件与 JavaFX 一起使用。我尝试将 maven-jlink-plugin 用于:

但得到:

通过阅读另一篇文章,我知道我必须生成模块信息,但希望有人已经在他们的 pom 中使用了 ModiTect Maven 插件,每次都会自动为他们完成。

我将在我的学生的所有程序中使用 JavaFX,并且不想让他们每次都为所有 JavaFX 模块手动执行。
已编辑
我尝试使用以下 pom


但我收到此错误:


有什么想法吗?还是我应该等到 Java11 完全发布并希望有人将模块信息添加到 JavaFX 文件中?

0 投票
2 回答
9235 浏览

java - 如何在 Java http 客户端中自定义“主机”标头

这是我的代码:

结果,我看到上面的代码发送:

如您所见,它发送了两个Host标头(一个来自 URI 和一个我指定的标头),但我希望它发送Host我指定的标头,而不是来自 URI 的标头。这个客户端可以吗?

编辑:在 Java 11 中,情况变得更糟(您需要将 client.send 行更改为:)client.send(request, HttpResponse.BodyHandlers.ofString());

如何自定义该标头(测试虚拟主机所需)?

我也尝试过setHeader并得到完全相同的问题(双Host标头或异常)。

编辑:我报告了一个JDK 错误