gpt4 book ai didi

JavaFX Dialog getResult() 方法未返回正确的泛型类型

转载 作者:行者123 更新时间:2023-11-29 04:16:05 32 4
gpt4 key购买 nike

我在处理 JavaFX 时遇到问题 Dialog<R>类(class)。我创建了一个带有自定义类型参数的对话框,比如说 String为简单起见。现在,每当我尝试获取对话框的结果时,我都会得到 ClassCastException。 .

以这个简单的 JavaFX 应用为例:

@Override
public void start(Stage primaryStage) {
Dialog<String> dialog = new Dialog<>();
dialog.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
String result = dialog.showAndWait().orElse(null);
}

一旦我按下 OK 按钮,我就会有一个错误堆栈导致:

Caused by: java.lang.ClassCastException: javafx.scene.control.ButtonType cannot be cast to java.lang.String

不用说,代码可以完美编译。似乎无论何时触发 OK 按钮,对话框的值都会被强制为 ButtonType 类型的值。 .不是您期望知道方法签名的类型。

如果我使用 getResult() 方法也是如此显示对话框后。

我使用的是 Oracle 的 JVM 1.8.0_151。

感谢任何见解。

最佳答案

Dialog API如果类型不是 VoidButtonType,则要求您设置结果转换器回调。要让您的示例运行:

@Override
public void start(Stage primaryStage) {
Dialog<String> dialog = new Dialog<>();
dialog.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
dialog.setResultConverter(ButtonType::getText);
String result = dialog.showAndWait().orElse(null);
System.out.println(result);
}

在上面的代码片段中,result 包含值 OK。这并不比将 ButtonType 作为类型参数更有用。如果要从 Dialog 获取域对象,更惯用的方法是将事件附加到 OK 按钮,对输入执行验证并在事件处理程序中计算结果对象。该文档列出了实现该目标的三种方法。

关于JavaFX Dialog getResult() 方法未返回正确的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52342915/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com