JavaFX默默地吞下拖动侦听器中引发的异常
作者:互联网
看起来,在JavaFX中,将异常拖入侦听器时会默默地吞下异常.我已经搜索过,在文档中找不到任何提及.
我在下面重新创建了这个…
无论如何有防止这种情况并暴露异常的方法吗?
public class App extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button source = new Button("source");
Button destination = new Button("destination");
HBox box = new HBox(source, destination);
source.setOnDragDetected(event -> {
Dragboard db = source.startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
content.putString("foo");
db.setContent(content);
event.consume();
});
destination.setOnDragOver(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
event.acceptTransferModes(TransferMode.LINK);
String nullReference = null;
nullReference.toCharArray(); // cause an exception
event.consume();
}
});
primaryStage.setScene(new Scene(box));
primaryStage.show();
}
}
根据James_D的反馈意见和进一步调查,我们发现具体情况因平台而异
> Ubuntu Linux. 1.8.0_40 =>看到异常
> Mac OSX.1.8.0_40 =>看到异常
> Windows7.1.8.0_40 =>没有例外
> Windows 7 1.8.0_121 =>无例外(撰写本文时为最新JDK)
解决方法:
似乎本机方法WinDnDClipboard.push(Object [],int)-由GlassClipboard.cpp支持,可以静默吞下该异常.在调试器中可以看到对Throwable.getMessage()的调用,但没有异常输出到控制台.
该文件的Java 9版本(http://hg.openjdk.java.net/openjfx/9-dev/rt/file/1a3f128518cd/modules/javafx.graphics/src/main/native-glass/win/GlassClipboard.cpp)对CheckAndClearException(env)进行了额外的调用.就像Utils.cpp中定义的一样,但这是针对RT-35400的,后者似乎无关.尚未将其反向移植到Java 8.
标签:java,javafx,javafx-8 来源: https://codeday.me/bug/20191009/1878650.html