我试图保存ArrayList
GraphicObjects
以便稍后重新加载。问题是,我无法加载ArrayList
,我总是得到一个空的ArrayList
而不是原来的ArrayList
。
原始[Line@2f06692f]
中有ArrayList
之类的对象。
以下是我的代码的重要部分:
PaintPanel p = new PaintPanel();
...a lot of code...
@Override
public void actionPerformed(ActionEvent e) {
ArrayList<GraphObject> savedList= new ArrayList<>();
switch (e.getActionCommand()) {
case "Save":
savedList = p.getGraphicList();
break;
这有效,我在[Line@2f06692f]
中获得了savedList
。
然而,当我尝试加载它时:
...some cases...
case "Load":
p.setGraphicList(savedList);
break;
这不起作用,savedList
此时始终为空。
这是我的PaintPanel
课程,其中graphicList
是我要保存的内容。
public class PaintPanel extends JPanel {
public ArrayList<GraphObject> graphicList = new ArrayList<>();
...
我不知道为什么......
这是我的Interface GraphObject:
import java.awt.*;
import java.io.Serializable;
public interface GraphObject extends Serializable {
void paint(Graphics2D g2d, boolean tmp);
void setPaintColor(Color color);
}
答案 0 :(得分:2)
很难说,但在我看来,savedList
在actionPerformed
方法的本地范围内,因此当方法结束并且实际上没有保存时,它会超出范围。
尝试将savedList
作为一个字段吗?很难根据您提供的代码量给出最佳建议。
答案 1 :(得分:2)
用
savedList = p.getGraphicList();
您只需将引用复制到完全相同的列表即可。之后由PaintPanel进行的所有更改也会影响savedList
变量。请尝试将其更改为
savedList = new ArrayList<>(p.getGraphicList());