我可能错过了一些非常明显的东西,但是你们中的任何人都可以看到为什么这会在线程“AWT-EventQueue-0”中产生异常java.lang.ArrayIndexOutOfBoundsException:0 我正在尝试创建一个Visds对象列表,但是2d列表必须只有一列。
public Visables[][] searchBYsong(String search) throws XPathExpressionException
{
MapVariableResolver vr = new MapVariableResolver() ;
vr.setVariable("myVar",search);
xpath.setXPathVariableResolver(vr);
XPathExpression expr = xpath.compile("/music/Song[contains(songName,$myVar)]");
nodes = (NodeList) expr.evaluate(doc,XPathConstants.NODESET);
Visables[][] AL = new Visables[nodes.getLength()+1][0];
for(int i = 0;i<nodes.getLength();i++)
{
AL[i][0]= new Visables();
}
for (int i = 0; i < nodes.getLength(); i++)
{
AL[i][0].getName(nodes.item(i).getChildNodes().item(0).getTextContent());
AL[i][0].setArtist(nodes.item(i).getChildNodes().item(1).getTextContent());
AL[i][0].setAlbum(nodes.item(i).getChildNodes().item(2).getTextContent());
AL[i][0].setLocation(nodes.item(i).getChildNodes().item(3).getTextContent());
}
return AL;
}
public class Visables
{
private String loaction;
private String name;
private String album;
private String artist;
public Visables()
{
}
@Override
public String toString()
{
return name;
}
public void setArtist(String artist)
{
this.artist=artist;
}
public void getName(String name)
{
this.name = name;
}
public void setAlbum(String album)
{
this.album = album;
}
public void setLocation(String location)
{
this.loaction=location;
}
}
答案 0 :(得分:1)
本声明中的[0]
Visables[][] AL = new Visables[nodes.getLength()+1][0];
表示您创建一个包含zero
元素的数组。访问first
元素后:
AL[i][0]= new Visables();
您收到此错误。在前面的语句中,[0]
表示第一个元素。
要解决此问题,您需要创建一个包含1个元素的数组。所以像这样创建你的数组:
Visables[][] AL = new Visables[nodes.getLength()+1][1];
并且像这样访问(未更改):
AL[i][0]= new Visables();
我可以看到这有点令人困惑:)