JavaFX Dialog getResult()方法未返回正确的泛型类型
我在处理JavaFXJavaFX 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
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);
}