What is the required DataFlavor to copy files in Mac OSX

后端 未结 2 1687
一向
一向 2021-01-05 09:58

I\'m currently working on Java code that can copy files into the system clipboard.

For Windows and Linux I already got it working. For OSX I tried several flavors bu

相关标签:
2条回答
  • 2021-01-05 10:44

    Maybe you should try DataFlavor#javaFileListFlavor.

    Excerpt from the API documentation:

    DataFlavor#javaFileListFlavor (Link)

    To transfer a list of files to/from Java (and the underlying platform) a DataFlavor of this type/subtype and representation class of java.util.List is used. Each element of the list is required/guaranteed to be of type java.io.File.
    0 讨论(0)
  • 2021-01-05 10:55

    I did a small investigation and here is the answer:

    It should work with

    DataFlavor#javaFileListFlavor
    

    but the copy-paste functionality for files is broken on the native side for all JDKs that are based on OpenJDK.

    The OpenJDK implementation uses NSPasteboard.sendData method with the format NSFilenamesPboardType. Unfortunately, NSFilenamesPboardType is deprecated and removed after 10.14. So the functionality worked in 10.13 and before but is broken after the version.

    There are a couple of possible solutions:

    1. I've found the NSPasteboardAPI library that provides proper native API. Here is the java implementation based on the library.

    2. I've fixed the problem in the JetBrains Runtime on the native side so it just works with DataFlavor#javaFileListFlavor as you expected.

    It is funny that the problem exists for ~10 years at this moment. I believe it will be also fixed in some upcoming OpenJDK versions, but I am not sure when.

    0 讨论(0)
提交回复
热议问题