Java数组索引超出界限异常:-1

时间:2015-03-11 11:20:14

标签: java arrays string list exception

好吧,我有一个问题,我无法弄清楚什么是错的。所以我有jList和List。 我需要一个函数,当我点击项目(在jList任何项目中),它会在我的标签图标中改变,(我处理图像)。 它以某种方式工作,它将我的标签图标更改为我从jList中选择的图像,但它会抛出异常并且程序崩溃,通常前两个项目不会导致错误,第三个和其他项目会导致它。在它崩溃并抛出一堆红色文字后,我仍然可以改变我的图标。

这是我获取图像并将它们添加到List(添加路径)

的功能
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(名单)。

是例外
  

a = Main.imagesListN.indexOf(k);

它给了我-1,但是 h = Main.imagesListN.get(k); 给了我需要的链接并将它提供给 ImageIcon img = new ImageIcon(h) ; 然后 imageReview.setIcon(img); 。每次单击我需要的项目时,标签图标都会发生变化。也许它不是 a = Main.imagesListN.indexOf(k); 我正在看,但有些东西给了我-1。 顺便说一下,我对Thread中的所有内容都有所了解。

`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中(类所有按钮,标签等都是其他创建的)和Thread,Thread。一切都下载后也可以正常工作,没有例外。在下载过程中出现错误

1 个答案:

答案 0 :(得分:0)

indexOf api接受Object作为参数,而get接受Object和原始类型。因此,当您使用原始类型元素调用get时,它会按您可能找到的索引查找元素。

但是当你做indexOf时,你正在列表中搜索一个对象,因此得到-1。