Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX Dialog getResult()方法未返回正确的泛型类型_Java_Generics_Javafx_Classcastexception - Fatal编程技术网

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

JavaFX Dialog getResult()方法未返回正确的泛型类型,java,generics,javafx,classcastexception,Java,Generics,Javafx,Classcastexception,我在处理JavaFXDialogclass时遇到了一个问题。为了简单起见,我创建了一个带有自定义类型参数的对话框,比如说String。现在,每当我试图获取对话框的结果时,我都会得到一个ClassCastException 以这个简单的JavaFX应用程序为例: @Override public void start(Stage primaryStage) { Dialog<String> dialog = new Dialog<>(); dialog.ge

我在处理JavaFX
Dialog
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按钮时,对话框的值都会被强制为
ButtonType
类型。不是您希望知道方法签名的类型

如果在显示对话框后使用方法
getResult()
,也会出现这种情况

我使用Oracle的JVM1.8.0_151

感谢您的帮助。

如果类型不是
Void
按钮类型,则需要设置结果转换器回调。要运行示例,请执行以下操作:

@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);
}
@覆盖
公共无效开始(阶段primaryStage){
Dialog=新建Dialog();
dialog.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
setResultConverter(ButtonType::getText);
字符串结果=dialog.showAndWait().orElse(null);
系统输出打印项次(结果);
}

在上面的代码段中,
result
保存值
OK
。这几乎比将
ButtonType
作为类型参数更有用。如果要从
对话框
中获取域对象,更惯用的方法是将事件附加到“确定”按钮,对输入执行验证,并在事件处理程序中计算结果对象。文档中列出了实现这一点的三种方法。

谢谢Kiril。这确实奏效了。我仍然觉得奇怪,尽管一个方法并不真正尊重它的签名。
@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);
}