将文件附件从Outlook拖放到Java应用程序中-是否可以在Swing中运行,但不能在JavaFX中运行?

时间:2019-06-26 13:49:29

标签: java swing javafx outlook

上下文:Windows 7 64位,Java 8,Microsoft Outlook 2010。

首先,是的,关于此主题还有其他一些问题(例如herehere)。这个问题有更多的背景,而且我尝试做的事情实际上可以在Swing中使用-因此,与Swing相比,这也许是JavaFX拖放功能的局限性。

在某些基于Java Swing的应用程序中,从Outlook电子邮件中拖动文件附件可以正常工作。例如,如果我有一封带有纯文本文件附件(或XML)的电子邮件,并将该附件直接拖到IntelliJ IDEA(2019.1版)中,则会打开一个新标签,其中包含附件内容。

请注意,我不是将附件拖到桌面上,然后拖到应用程序中,而是直接从Outlook拖到IntelliJ。

这在NetBeans和DbVisualizer(基于Swing的应用程序)中也适用。

我对Outlook的理解是文件附件的拖放要求接收应用程序能够直接从Outlook流式传输二进制数据。有一些示例C / C ++代码here和一个.NET示例here。不少本地Windows应用程序甚至都不想处理此问题-例如,您无法将文件附件从Outlook直接拖到记事本中。

到目前为止,我还无法使用JavaFX进行这项工作。我得到了drop事件,并枚举了2种数据格式(私有的一种称为“ RenPrivateItem”,另一种称为“ message / external-body”)。但是尝试获取这些格式中的任一种只会返回null。

为此here,有一个针对OpenJDK的错误。

是的,我知道有一个解决方法-进行拖放时,可以使用Outlook加载项(例如OutlookFileDrag)将Outlook复制附件复制到本地临时文件夹。然后,我的应用程序收到的拖放操作只是一个本地文件名列表,一切都很简单。

但是我想尽可能避免使用Outlook加载项。

所以我的问题实际上有几个子问题:-

  • 当拖动文件附件时,Swing / AWT似乎可以从Outlook管理数据传输(IDataObject接口?)。 JavaFX是否实现相同的功能?

  • 在JavaFX应用程序中是否可以使用AWT拖放功能?还是只是自找麻烦?

  • 如果JavaFX实际上已经实现了必要的Windows代码来复制文件附件数据(并且我希望它具有,因为至少可以看到数据格式),是否有任何方法可以获取剪贴板对象上有原始字节?

顺便说一句,我一直在尝试深入研究JDK和IntelliJ的源代码,以实际了解如何在Swing中实现此功能,但在所有细节上都有些遗漏。如果有人能指出我实际实现此行为的类/文件,谢谢,谢谢。

0 个答案:

没有答案