У меня есть следующий код, предназначенный для помещения ряда файлов из приложения JavaFX в системный буфер обмена:
pane.setOnDragDetected(event -> {
List<File> files = ...
Dragboard dragBoard = ((Node)event.getSource()).startDragAndDrop(TransferMode.COPY);
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putFiles(files);
dragBoard.setContent(clipboardContent);
event.consume();
});
Код отлично работает на Java 11 (Oracle JDK 11.0.1).
В Java 13 (OpenJDK 13.0.1), однако, это завершается ошибкой, если я помещаю более одного файла в буфер обмена (один также отлично работает) со следующим сообщением об ошибке:
2019-11-09 23:53:28.956 java[50078:1146885] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'There are 3 items on the pasteboard, but 1 drag images. There must be 1 draggingItem per pasteboardItem.'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff2db3af53 __exceptionPreprocess + 250
1 libobjc.A.dylib 0x00007fff63c00835 objc_exception_throw + 48
2 CoreFoundation 0x00007fff2db3ada9 +[NSException raise:format:] + 189
3 AppKit 0x00007fff2afc93bb -[NSDraggingSession(NSInternal) _initWithPasteboard:image:offset:source:] + 247
4 AppKit 0x00007fff2afc8dee -[NSCoreDragManager dragImage:fromWindow:at:offset:event:pasteboard:source:slideBack:] + 1889
5 AppKit 0x00007fff2afc867d -[NSWindow(NSDrag) dragImage:at:offset:event:pasteboard:source:slideBack:] + 134
6 libglass.dylib 0x000000012f55a618 -[GlassViewDelegate startDrag:] + 1080
7 libglass.dylib 0x000000012f5650c7 Java_com_sun_glass_ui_mac_MacPasteboard__1putItemsFromArray + 2439
8 ??? 0x00000001140bec90 0x0 + 4631293072
9 ??? 0x00000001140b8a90 0x0 + 4631267984
10 ??? 0x00000001140b8a90 0x0 + 4631267984
11 ??? 0x00000001140b8a90 0x0 + 4631267984
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Это то, что я могу найти обходной путь или я столкнулся с реальной проблемой в интеграции Java / JavaFX / macOS?
- ОС: macOSКаталина (10.15.1)
- JDK: openjdk-13.0.1