Eclipse - исключение буфера обмена "ClassNotFoundException" - PullRequest
0 голосов
/ 02 августа 2020

Я разрабатываю приложение в Eclipse с фреймами. В некоторые панели я разрешаю пользователю вставлять данные из своего буфера обмена. Обычно тихо. Проблема в том, что то, что находится в буфере обмена, было скопировано из intelliJ (из-за того, что IntelliJ заставляет все, что копируется, стать сериализованным объектом) и приводит к исключению (ClassNotFoundException), и я не могу его уловить.

Кто-нибудь знает, как этого избежать, в коде?

Исключение:

Exception "java.lang.ClassNotFoundException: com/intellij/codeInsight/editorActions/FoldingData"
    while constructing DataFlavor for: 
    application/x-java-jvm-local-objectref;
    class=com.intellij.codeInsight.editorActions.FoldingData

1 Ответ

0 голосов
/ 02 августа 2020

Очевидным ответом будет , чтобы поймать исключение и проигнорировать его.

Если вы не можете этого сделать, возможны следующие варианты:

  1. Разработайте патч для Eclipse, который позволяет подключаемому модулю подавлять эти исключения ... каким-то образом 1 . Затем отправьте отчет об ошибке Eclipse, указав свой патч в качестве решения.

  2. Попросите пользователя добавить файл Intellij "idea.jar" в путь к классам Eclipse, чтобы Eclipse мог десериализовать эти объекты . Затем вам может потребоваться внести дополнительные изменения в свой плагин, чтобы он мог понять объекты IDEA, которые пользователь пытается скопировать и вставить в Eclipse.

  3. Документируйте, что делает ваш плагин не поддерживает копирование / вставку из Intellij IDEA.

Я не видел никакого способа остановить Intellij от помещения сериализованных объектов в буфер обмена.

ОБНОВЛЕНИЕ - Я провел еще несколько исследований по этому поводу. Строка

"while constructing DataFlavor for:" 

появляется в исходном коде для java.awt.datatransfer.SystemFlavorMap. Это говорит о том, что проблема на самом деле та же, что и Java ошибок JDK-6606476 и 8246248 . (В последнем случае проблема возникает из-за определенных типов файлов JPEG.)

Изучение исходного кода предполагает, что эту проблему можно обойти; например, создав и зарегистрировав пользовательский DataFlavor и реализовав DataContentHandler / DataContentHandlerFactory, чтобы позаботиться о преобразовании 2 . Однако я не могу дать вам подробностей.

1 - Оказывается, проблема, вероятно, НЕ в базе кода Eclipse.

2 - Если вам не нравится декодирование Java формата сериализации вручную , Я предлагаю вам "десериализовать" этот материал как объекты без содержимого ... и заставить ваше приложение незаметно игнорировать события DnD для такого рода данных.

...