【发布时间】:2018-12-01 01:23:28
【问题描述】:
这个 HashMap 是我想保存并转移给其他人的信息。
HashMap<String,City> labelMap;
City 对象有 ArrayList
class City implements Serializable{
ArrayList<Marker> markerList;
City(){
markerList = new ArrayList<Marker>();
}
public void setMarker(Marker marker) {
markerList.add(marker);
}
}
Marker 类是 JLabel 对象
class Marker extends JLabel implements Serializable{
ImageIcon image;
private Point point;
private String textString;
Marker(Point point, String textString){
this.point = point;
this.textString = textString;
image = new ImageIcon(Toolkit.getDefaultToolkit().getImage("Icon/marker.png"));
setIcon(image);
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String getTextString() {
return textString;
}
public void setTextString(String textString) {
this.textString = textString;
}
}
那么如何将包含上述信息的 HashMap 保存到文件中,以便稍后加载或发送?
我尝试使用序列化,但它不起作用。有没有办法有效地存储基于 Swing 的程序对象?
我终于解决了。
问题不是基于 awt 或 swing 的。
我从jlabel得到的字符串不是英文的,但是如果是英文也没关系,但是如果不是英文就报错了。所以 Jlabel.setText = "";我把Jlabel的文字留空,然后序列化非英文字符来修复。
毕竟,当 JLabel.getText 采用非英文字符并将其序列化时,问题出在 JLabel.getText 上
【问题讨论】:
-
“有没有办法有效地存储基于 Swing 的程序对象?” 方法不是存储组件本身,而是存储内容或状态。例如。对于文本字段,字符串内容。对于复选框,一个布尔值,表示它是否被选中。对于这个自定义标签,
point和textString这两个属性(可能会创建一个仅包含这两个对象的可序列化 POJO)。顺便说一句 - 我会避免这种形式的序列化以支持 XML。 -
Swing 组件(如
JLabel)不可序列化有充分的理由...... -
您说“我尝试使用序列化,但它不起作用”。请以MCVE 的形式分享您的research、attempt,以及为什么it's not working 包括错误消息和/或堆栈跟踪,以便阅读您问题的人可以更好地帮助您。
-
@D.B.很好的建议,尤其是 "..in MCVE" 的形式。提示:评论中的
[mcve]会自动扩展为minimal reproducible example。
标签: java swing serialization