Перетащите вложенные файлы из Outlook в приложение Java - работает в Swing, но не в JavaFX? - PullRequest
2 голосов
/ 26 июня 2019

Контекст: 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, но я немного теряюсь во всех деталях.Если бы кто-нибудь мог указать мне на классы / файлы, которые действительно реализуют это поведение, я был бы благодарен, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...