Контекст: Windows 7 64-разрядная, Java 8, Microsoft Outlook 2010.
Во-первых, да, есть несколько других вопросов по этой теме (например, здесь и здесь ).Этот вопрос имеет больше общего и тот факт, что то, что я пытаюсь сделать, на самом деле работает в Swing - так что, возможно, это ограничение возможностей перетаскивания JavaFX по сравнению с Swing.
Перетаскивание вложенного файла из электронной почты Outlook работает как положено в некоторых приложениях на основе Java Swing.Например, если у меня есть электронное письмо с вложением в виде простого текстового файла (или, если на то пошло, XML), и я перетаскиваю это вложение непосредственно в IntelliJ IDEA (версия 2019.1), открывается новая вкладка с содержимым вложения.
Примечание. Я не перетаскиваю вложение на рабочий стол, а затем в приложение, но напрямую из Outlook в IntelliJ.
Это также работает в NetBeans и DbVisualizer (оба приложения на основе Swing).
Мое понимание Outlook состоит в том, что перетаскивание для вложенных файлов требует, чтобы принимающее приложение могло передавать двоичные данные непосредственно из Outlook.Есть некоторый пример кода C / C ++ для этого здесь и пример .NET здесь .Многие родные приложения Windows даже не удосуживаются справиться с этим - например, вы не можете перетащить вложение файла из Outlook непосредственно в Блокнот.
До сих пор я не смог выполнить эту работу в JavaFX.Я получаю событие удаления и перечисляет 2 формата данных (частный, называемый RenPrivateItem, и второй, называемый message / external-body).Но попытка получить любой из этих форматов просто возвращает ноль.
Есть ошибка, поданная в OpenJDK для этого здесь .
И да, я знаю, что есть обходной путь- Я могу использовать надстройку Outlook, такую как OutlookFileDrag , чтобы создавать вложения Outlook в локальную временную папку при перетаскивании.Перетаскивание, которое получает мое приложение, - это просто список локальных имен файлов, и все очень просто.
Но я бы хотел избежать надстроек Outlook, если это возможно.
Так что у моей проблемы на самом деле есть пара подвопросов: -
Похоже, что Swing / AWT может управлять передачей данных (интерфейс IDataObject?) Из Outlook при перетаскивании файлового вложения.Разве JavaFX не реализует ту же функциональность?
Есть ли способ использовать функцию перетаскивания AWT в приложении JavaFX?Или это просто вызывает проблемы?
Если JavaFX фактически реализовал необходимый код Windows для копирования данных вложения файла (и я надеюсь, что он есть, потому что я могу видетьформаты данных, по крайней мере), есть ли способ просто получить необработанные байты от объекта dragboard?
В дополнение, я пытался вникнуть в исходный код дляJDK и IntelliJ на самом деле видят, как это реализовано в Swing, но я немного теряюсь во всех деталях.Если бы кто-нибудь мог указать мне на классы / файлы, которые действительно реализуют это поведение, я был бы благодарен, спасибо.