[英]Java Array Index Out Of Bounds Exception: -1
好吧,我有一个问题,我不知道怎么了。 所以我有jList和List。 我需要一个函数,当我单击项目(在jList中的任何项目中)时,它会在标签图标(我正在处理图像)中发生变化。 它以某种方式工作,将我的标签图标更改为我从jList中选择的图像,但是它引发了异常,程序崩溃了,通常前2个项目没有引起错误,第三个项目导致了它。 当它崩溃并抛出红色文本后,我仍然可以更改图标。
这是我获取图像并将其添加到列表(向其添加路径)的功能
private static void getImages(String src) throws IOException {
//Exctract the name of the image from the src attribute
int indexname = src.lastIndexOf("/");
if (indexname == src.length()) {
src = src.substring(1, indexname);
}
indexname = src.lastIndexOf("/");
String name = src.substring(indexname, src.length());
//Open a URL Stream
URL url = new URL(src);
InputStream in = url.openStream();
GPath=fPath+name;
OutputStream out = new BufferedOutputStream(new FileOutputStream( GPath));
//Im adding to the list string (link to image) here
imagesListN.add(GPath);
System.out.println("list size: "+imagesListN.size());
for (int b; (b = in.read()) != -1;) {
out.write(b);
}
out.close();
in.close();
}
它通常添加它们。 是的,我正在下载它们,这就是为什么我要在下载它们后查看它们。
这是我单击jList函数的地方。
list.addListSelectionListener(new ListSelectionListener() {
private int a;
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (!arg0.getValueIsAdjusting()) {
String h;
int k;
k = list.getSelectedIndex();
System.out.println("List id: "+k);
a = Main.imagesListN.indexOf(k);
System.out.println("imagesListN id: "+a);
h = Main.imagesListN.get(k);
System.out.println("h : "+h);
ImageIcon img = new ImageIcon(h);
imageReview.setIcon(img);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
这是jList(名称列表)。 例外在
一个= Main.imagesListN.indexOf(k);
它给我-1,但是h = Main.imagesListN.get(k); 给我所需的链接,并将其提供给ImageIcon img = new ImageIcon(h); 然后是imageReview.setIcon(img); 。 当我单击所需项目时,标签图标每次都会更改。 也许不是= Main.imagesListN.indexOf(k); 我正在看的东西,但是某些东西让我为-1。 顺便说一句,我正在执行线程中的所有内容。
`public class Crawler extends Thread {
Main main = new Main();
public void run(){
try {
main.download();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}`
这里没什么好看的。 每个函数都在自己的类中,getImages()在main中,listListener在Langas类中(所有按钮,标签等均未创建的Class)以及Thread和Thread。 一切下载完成后,它也可以正常工作,没有例外。 在下载过程中出现错误
indexOf api接受Object作为参数,而get接受Object以及原始类型。 因此,当您使用基本类型element调用get时,它将通过您可能已找到的索引来查找element。
但是当执行indexOf时,您正在列表中搜索对象,因此得到-1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.