【问题标题】:Eclipse - Clipboard exception "ClassNotFoundException"Eclipse - 剪贴板异常“ClassNotFoundException”
【发布时间】:2020-11-22 11:49:36
【问题描述】:

我正在 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

【问题讨论】:

  • 这能回答你的问题吗? Java intellij clipboard backup
  • @Thirumal 在问这里之前我花了很长时间试图解决,我也找到了这个帖子。事实上它解决了,但不仅仅是 Intellij,而是所有 JetBrains 产品。如果jetbrains 这样做,其他应用程序也不是不可能这样做,这就是为什么我想找到一种方法来防止这种情况发生:/

标签: java eclipse swing intellij-idea awt


【解决方案1】:

显而易见的答案应该是捕获异常并忽略它。

如果你不能这样做,一些可能性是:

  1. 为 Eclipse 开发一个补丁,允许插件抑制这些异常...1。然后提交一份 Eclipse 错误报告,提供您的补丁作为解决方案。

  2. 让用户将 Intellij“idea.jar”文件添加到 Eclipse 类路径中,以便 Eclipse 可以反序列化这些对象。然后,您可能需要对您的插件进行进一步修改,以使其能够理解您的用户试图复制并粘贴到 Eclipse 中的 IDEA 对象。

  3. 证明您的插件不支持从 Intellij IDEA 复制/粘贴。


我无法阻止 Intellij 将序列化对象放入剪贴板。


更新 - 我对此做了更多研究。字符串

"while constructing DataFlavor for:" 

出现在java.awt.datatransfer.SystemFlavorMap 的源代码中。这表明该问题实际上与报告为 Java 错误 JDK-66064768246248 的问题相同。 (在后一种情况下,问题是由某些类型的 JPEG 文件触发的。)

检查源代码表明应该可以解决这个问题;例如通过创建和注册自定义DataFlavor 并实现DataContentHandler / DataContentHandlerFactory 来处理转换2。但是,我不能给你具体的信息。


1 - 事实证明问题可能根本不在 Eclipse 代码库中。

2 - 除非您喜欢手动解码 Java 序列化格式,否则我建议您将这些东西“反序列化”为无内容对象……并让您的应用程序安静地忽略此类数据的 DnD 事件。

【讨论】:

  • 堆栈跟踪实际上就是那个异常行。如果我在 Intellij 中复制某些内容并将其粘贴到 Intellij 制作的 Swing 中,也会发生同样的情况。我宁愿只从“我这边”解决错误,而不要求用户做某事。
  • 这个错误并没有停止程序,它只是停止了几秒钟,事实上,我可以(在临时停止之后)粘贴我从 Intellij 复制的内容。奇怪的是,如果您第二次从 intellij 复制某些内容,则不会出现错误。任何 JetBrains 程序都会导致此问题。 Android Studio、Intellij IDEA 就是很好的例子。
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多