我正在尝试让我的剪贴板通过拖放方式接收一些自定义数据。自定义数据是另一种Java类型。这种其他类型确实实现了可序列化,因此我真的不确定为什么这不起作用。任何想法表示赞赏!

imgView.setOnDragDetected(new EventHandler<MouseEvent>() {
    public void handle(MouseEvent event) {
        ClipboardContent content = new ClipboardContent();
        content.put(dataFormat, RHSIconizedToken.this);
        Dragboard db = imgView.startDragAndDrop(TransferMode.ANY);
        db.setContent(content);
        event.consume();
    }
});

要稍后检索此对象,请使用:
RHSIconizedToken replacementRHSiToken = (RHSIconizedToken) db.getContent(RHSIconizedToken.getDataFormat());

我收到以下错误,但是RHSIconizedToken确实实现了Serializable

java.lang.IllegalArgumentException:无法序列化数据

GetDataFormat返回第一个代码示例的put参数中使用的DataFormat对象。

最佳答案

那是因为您的对象不可序列化。

确实,不是因为它实现了Serializable就可以序列化。

深入研究异常,您可能会发现类似这样的东西

Caused by: java.io.NotSerializableException: javafx.beans.property.SimpleObjectProperty

也许将一些字段设为transient会有所帮助。

10-07 12:51