Java 在snakeyaml中序列化hashmap时发生堆栈溢出
我试图用snakeYAML 1.13序列化一个包含hashmap的类,结果得到了一个非常奇怪的stackoverflow: 完整的代码在类中还有一些其他的东西,为了简单起见,我去掉了这些东西 使用的示例代码:Java 在snakeyaml中序列化hashmap时发生堆栈溢出,java,stack-overflow,snakeyaml,Java,Stack Overflow,Snakeyaml,我试图用snakeYAML 1.13序列化一个包含hashmap的类,结果得到了一个非常奇怪的stackoverflow: 完整的代码在类中还有一些其他的东西,为了简单起见,我去掉了这些东西 使用的示例代码: import java.awt.Point; import java.util.HashMap; import org.yaml.snakeyaml.Yaml; class TestClass { public static void main(final String arg
import java.awt.Point;
import java.util.HashMap;
import org.yaml.snakeyaml.Yaml;
class TestClass
{
public static void main(final String args2[])
{
IZSkinFile f = new IZSkinFile();
HashMap<String,Point> ep = f.getElementPositions();
ep.put("another unimportant name",new java.awt.Point(10, 10));
System.out.println(new Yaml().dump(f));
}
}
class IZSkinFile
{
public IZSkinFile(String uprogram)
{
elementPositions = new HashMap<>();
}
public IZSkinFile(){
elementPositions = new HashMap<>();
}//serialisierer....
// private HashMap<String,String> elementDefinitions;//name>typ (Grafik/text/Schriftart)
private HashMap<String,Point> elementPositions; //basisposition des elements
public HashMap<String, Point> getElementPositions()
{
return elementPositions;
}
public void setElementPositions(HashMap<String, Point> elementPositions)
{
this.elementPositions = elementPositions;
}
}
导入java.awt.Point;
导入java.util.HashMap;
导入org.yaml.snakeyaml.yaml;
类TestClass
{
公共静态void main(最终字符串args2[])
{
IZSkinFile f=新的IZSkinFile();
HashMap ep=f.getElementPositions();
put(“另一个不重要的名字”,newjava.awt.Point(10,10));
System.out.println(新Yaml().dump(f));
}
}
类文件
{
公共文件(字符串连根图)
{
elementPositions=newhashmap();
}
公共文件(){
elementPositions=newhashmap();
}//连载者。。。。
//私有HashMap元素定义;//名称>类型(Grafik/text/schriStart)
私有HashMap elementPositions;//基本位置des元素
公共HashMap getElementPositions()
{
返回元素位置;
}
公共void setElementPositions(HashMap elementPositions)
{
this.elementPositions=elementPositions;
}
}
结果如下Stackoverflow(仅显示上端和下端,用于保存不必要的行):
Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:122)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at org.yaml.snakeyaml.nodes.Tag.<init>(Tag.java:87)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:74)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
...
...
...
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
线程“main”java.lang.StackOverflower中出现异常
位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:122)
位于java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
位于java.lang.StringBuilder.append(StringBuilder.java:132)
位于org.yaml.snakeyaml.nodes.Tag.(Tag.java:87)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:74)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
...
...
...
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
位于org.yaml.snakeyaml.representer.representer.representJavaBeanProperty(representer.java:125)
位于org.yaml.snakeyaml.representer.representer.representJavaBean(representer.java:83)
位于org.yaml.snakeyaml.representer.representer$RepresentJavaBean.representData(representer.java:49)
位于org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
发现了愚蠢的问题…
不知何故,
java.awt.Point
即使它只有2个属性也会弄糟。由于这个bug让我抓狂,现在使用一个带有2个int的int[]
数组来存储。太好了,如果问题得到解决,请接受您的答案:)需要等待2天,直到可能