【发布时间】:2018-05-23 06:30:56
【问题描述】:
我正在尝试通过拖放将元素从一个 JavaFX 应用程序移动到另一个应用程序,据我所知,这应该不是问题。
所以我有一个类的对象并将它从一个应用程序拖到另一个应用程序,然后将其内容打印到控制台。它看起来不错,我可以通过玩转传输模式将下降到“接受”或“不接受”,这表明机制本身似乎正在工作。 但是当我将对象放在另一个应用程序上时,一堆我认为主要是中文的字母被打印到控制台。这显然是一些编码问题,但我无法真正弄清楚发生了什么,除了两个应用程序主要使用相同的代码库这一事实之外,“中文”字母非常多。对象的 toString 只打印了一个半行的拉丁字符,但在放置时会打印几段“中文”字母。
谁能告诉我这里发生了什么?它只是一个简单的编码 f-up 吗?操作系统(Win7 btw)可能会干扰这里吗?我发现了久违的中国古代智慧了吗?
代码本身比较简单,这里是发件人的代码
setOnDragDetected(event ->
{
Dragboard db = startDragAndDrop(TransferMode.ANY);
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.put(DataFormat.PLAIN_TEXT, treeElement.getEntities());
db.setContent(clipboardContent);
System.out.println(db.getContent(DataFormat.PLAIN_TEXT));
event.consume();
});
这里来自“接收者”
setOnDragDropped(event ->
{
Dragboard db = event.getDragboard();
if (db.hasContent(DataFormat.PLAIN_TEXT))
{
System.out.println(db.getContent(DataFormat.PLAIN_TEXT));
System.out.println("Accept Drop");
}
event.consume();
});
我真的没有看到任何可以解释我的错误的东西。
【问题讨论】:
-
treeElement.getEntities()返回什么样的对象?您在第二个代码 sn-p 中使用引用类型Boolean而不是原始类型boolean是否有任何具体原因? -
它返回 List
,Entity 实现可序列化并且是已经提到的两个应用程序的通用代码库的一部分。