当前位置: 首页 > 知识库问答 >
问题:

将javaJVMLocalObjectMimeType用于本地DnD,将序列化用于外部drop

贾骏
2023-03-14

我正在处理堆叠较小组件的组件。用户应该能够使用拖放更改这些组件的顺序。我通过实现一个TransferHandler来完成这项工作,该TransferHandler接受底层数据模型的本地引用DataFlavorjavaJVMLocalObjectMimeType)。这很好。

现在,我还想再次运行我的应用程序,并能够将我的组件从一个应用程序拖到另一个应用程序中。在这种情况下,我想将拖动源的必要数据捆绑到一个可序列化的对象中,以在drop应用程序中重建该对象,并为此使用可序列化的DataFlavor。我不想在这两种情况下都使用对象序列化。

如何确定拖动操作是否起源于同一个JVM,以便决定使用对象引用或数据的序列化版本。官方swing DnD文档提到可以混合本地和序列化风格,但它没有告诉如何最好地利用这一点。

编辑

这是我如何在我的DataModelTransable中创建味道

public static DataFlavor localFlavor;

static {
    try {
        localFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + ";class=\"" +  ArrayList.class.getName() + "\"");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
...
@Override
public DataFlavor[] getTransferDataFlavors() {
    return new DataFlavor[] { localFlavor };
}

在我的TransferHandler中,我这样做

@Override
public boolean canImport(TransferSupport support) {
    return support.isDataFlavorSupported(DataModelTransferable.localFlavor);
}

正如我所说,这在本地运行良好,但如果我从一个实例拖动到另一个实例,则可以接受拖动,这将导致java.io。IOException:所有者未能在drop应用程序和java.io上转换数据。NotSerializableException:alignment.model。拖动源应用程序上的数据模型。这没关系,但首先不应该在另一个应用程序上接受拖动。

我正在使用ArrayList,因为我还希望能够同时拖动多个对象,仅供参考。

共有2个答案

欧阳飞章
2023-03-14

对于每个运行的JVM,您的对象引用风格通常是不同的。因此,在请求“序列化dataflavor版本”之前,首先检查可转移的是否支持“对象引用风格”。

晋鹤轩
2023-03-14

我刚刚发现了问题所在。我为未实现可序列化的数据模型数组列表编写了一个包装类,并将我的数据风格声明修改为:

localFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + ";class=\"" +  DataModelList.class.getName() + "\"");

之后,如果拖放源和拖放目标不在同一个JVM中,则认为它们之间的味道不相等。

我的结论是,不可能将局部对象引用风格直接用于实现可序列化的类。如果有人知道这是记录在哪里,我很高兴听到它。

 类似资料:
  • 问题内容: 我正在尝试使用.get()或.post()执行简单的jQuery AJAX尝试。 如果我的服务器上有本地副本,请执行以下操作: 我在Firebug的控制台中监视获取已完成,并且得到响应。 我所更改的只是到外部服务器的URI,没有任何反应。 如果我取消了’s’或使用了post,则无济于事。我是否缺少一些我应该在jQuery中使用的参数? 编辑:我忘记提及我这样做的原因是因为我最终要从一个

  • 问题内容: 我有一个包含地图(带有非字符串键)和其他一些字段的类。 我想使用Jackson来对该类进行序列化和反序列化。我看到了另一种方法,因此决定尝试使用杰克逊模块。 我关注了这篇文章,并扩展了JsonDeserializer和JsonSerializer。问题在于这些类应该被键入,因此看起来应该像 KeySerializer也是如此。 然后添加到模块: 但这显然是错误的,因为我遇到了一个例外:

  • 但它抛出了一个异常: JSONMappingException:意外标记(VALUE_NUMBER_INT),预期的value_string:预期的数组或字符串。 如何将epoch反序列化为?我想补充一点,如果将datatype从更改为,它可以非常好地工作。因此,最好反序列化到并创建getter和setter,它们将执行到的转换。

  • 我有一个来自DB的结果集,其形式为映射 我为类型为jsonb的PGObject类编写了一个自定义org.postgresql.util.序列化程序,它在

  • 问题内容: CSS定制游标可以使用外部图像URL吗?以下示例不起作用: HTML: CSS: 问题答案: 由于您的图片太大,因此无法正常工作-图片尺寸受到限制。例如,在Firefox中,大小限制为128x128px。。 此外,您还必须添加。