fxml对应的controller里有一全局变量:
public List<Node> selNodes=new ArrayList<>();
放入剪贴板操作:
ClipboardContent cc = new ClipboardContent();
cc.put(DataFormat.RTF, selNodes);
System.out.println("putAddress:"+selNodes.toString());
Clipboard.getSystemClipboard().setContent(cc);
从剪贴板取出操作
Object content = Clipboard.getSystemClipboard().getContent(DataFormat.RTF);
System.out.println("getAddress:"+content.toString());
System.out.println("selNodesAddress:"+selNodes.toString());
发现取出的content(也就是刚刚放进去的selNodes)不为空,类型也是ArrayList类型,但是size==0,里面的内容消失了!
输出如下:
putAddress:[Rectangle[x=345.75, y=120.0, width=150.0, height=150.0, fill=0xff000000, stroke=0xb3b3b3ff, strokeWidth=3.0]]
getAddress:[]
selNodesAddress:[]
并且这个问题的出现没有规律,有时候能正常取出,有时候消失!
怀疑是java虚拟机的垃圾回收器把selNodes的内容给回收了。要想selNodes不被回收,可以考虑把selNodes变为静态变量,加上static后,这个问题暂时没再出现过。
public static List<Node> selNodes=new ArrayList<>();