我创建了一个包含节点和弧的图表。当我关闭SWING应用程序并手动更新图形的结构(即删除一些节点和弧线)时,图形的旧结构不会从内存中删除。 例如:
ArrayList<Node> nodes = new ArrayList<Node>();
ArrayList<Arc> arcs = new ArrayList<Arc>();
nodes.add(new Node("N1"));
nodes.add(new Node("N2"));
nodes.add(new Node("N3"));
arcs.add(new Arc("N1","N2"));
arcs.add(new Arc("N2","N3"));
Graph g = new Graph(nodes,arcs);
在Node类中我有:
@Override
public String toString() {
return super.toString() +
(isNotConnected() ? " IS NOT CONNECTED" : "" );
}
然后我关闭应用程序,删除节点“N3”和弧(“N2”,“N3”)并再次运行应用程序。它说N3 IS NOT CONNECTED
。但是我删了N3!
要关闭应用程序,我使用:
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
另外,我尝试使用g = null
,但也没有帮助。
更新
public class Node {
private List<Arc> incoming = new ArrayList<Arc>();
private List<Arc> outgoing = new ArrayList<Arc>()
protected Node(String name) {
super(name);
}
// ...
public boolean isNotConnected() {
return incoming.isEmpty() && outgoing.isEmpty();
}
public void addIncoming(Arc arc) {
this.incoming.add(arc);
}
public void addOutgoing(Arc arc) {
this.outgoing.add(arc);
}
}
答案 0 :(得分:2)
“没有从内存中删除”的可能性很小 - 每次新的运行都是一个新的JVM,它意味着绝对干净的表,没有上一次运行的历史记录。
所以我把这种可能性排除在外。那剩下什么了?
isNotConnected()
方法中遇到错误 - 不太可能,因为我希望您有super.toString()
权利。N3
这里最重要的是,在排除所有其他可能性之前,你永远不应该责怪神奇的非清洁记忆。
玩得开心!
答案 1 :(得分:1)
这是不可能的。您没有正确检测到您的问题。可能你不是每次都编译代码并运行旧的二进制文件。