我试图通过使用get()方法返回该索引处的值来引用 profile_channels Vector。虽然它返回Vector的每个索引的最后一个值。代码在创建时打印Vector的每个元素,并且它们都按顺序正确打印,但问题仅在使用get()方法时。此代码适用于SAX XML Parser。
try {
handler = new DefaultHandler(){
int channel_amt = 0;
public void startElement(String uri, String localname, String name, Attributes attributes) throws SAXException {
if(name == "fixture"){
profileID++;
profile_name = attributes.getValue(0);
profile_mode = attributes.getValue(1);
profile_channels.clear();
} else {
if(name == "channel"){
profile_channel.clear();
profile_channel.addElement(attributes.getValue(0));
profile_channel.addElement(attributes.getValue(1));
// profile_channel.addElement(Boolean.parseBoolean(attributes.getValue(2)));
channel_amt++;
if(Arrays.asList(channels).indexOf(attributes.getValue(1)) != -1){
profile_channel_function[Arrays.asList(channels).indexOf(attributes.getValue(1))] = channel_amt;
}
} else {
profile_channel.addElement(new Range(Integer.parseInt(attributes.getValue(0)), Integer.parseInt(attributes.getValue(1)), attributes.getValue(2)));
}
}
}
public void endElement(String uri, String localname, String name) throws SAXException {
if(name == "fixture"){
profile[profileID] = new Profile(profile_name, profile_mode, profile_channels, profile_built_in_dimmer, profile_channel_function);
System.out.println(profile_channels.get(2));
} else if(name == "channel"){
System.out.println(profile_channel);
profile_channels.add(profile_channel);
}
}
};
loadProfile("test.xml");
有什么想法吗?底部的打印语句是我打印Vector的元素的地方。
答案 0 :(得分:0)
它不返回Vector的最后一个元素,但它总是为任何 get()调用返回完全相同的元素。
那是因为你正在做的事情:你重新使用一个对象实例,改变它的状态并多次添加到Vector中。
每次"频道"你需要创建一个新的profile_channel实例。元素发生。