Pengecualian Indeks Array Java Di Luar Batas: -1

Baiklah, saya punya masalah yang saya tidak tahu apa yang salah. Jadi saya punya jList dan List . Saya memerlukan fungsi yang ketika saya mengklik item (di jList item apa pun) dan itu akan berubah di label saya icon , (Saya berurusan dengan gambar). Entah bagaimana ia berfungsi, ia mengubah ikon label saya menjadi gambar yang saya pilih dari jList, tetapi itu memberi saya Pengecualian dan programnya mogok, biasanya 2 item pertama tidak menyebabkan kesalahan, item ketiga dan selanjutnya menyebabkannya. Setelah crash dan memunculkan banyak teks merah, saya masih dapat mengubah ikon saya.

Ini adalah fungsi di mana saya mendapatkan gambar dan menambahkannya ke Daftar (menambahkan jalur ke gambar tersebut)

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();

}

Ia menambahkannya secara normal. Ya, saya sedang mengunduhnya, itu sebabnya saya ingin melihatnya setelah diunduh.

Di sinilah saya mengklik fungsi 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();
                }
            }
        }
    });

Ini jList (daftar nama). Pengecualian ada di

a = Utama.imagesListN.indexOf(k);

itu memberi saya -1 , tetapi h = Main.imagesListN.get(k); memberi saya tautan yang saya perlukan dan memberikannya ke ImageIcon img = new ImageIcon(h); dan kemudian imageReview.setIcon(img); . Ikon label berubah setiap kali saya mengklik item yang saya perlukan. Mungkin bukan a = Main.imagesListN.indexOf(k); yang saya lihat, tetapi ada sesuatu yang memberi saya -1. Tapi saya menjalankan semuanya di 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();
        }

}`

tidak ada yang mewah di sini. Setiap fungsi ada di kelasnya sendiri, getImages() ada di main , listListener ada di kelas Langas (Kelas tempat semua tombol, label, dll. dibuat tidak ada yang lain) dan Thread well , Thread. Juga berfungsi dengan baik setelah semuanya diunduh, tidak ada pengecualian. Kesalahan muncul selama proses pengunduhan


person Gaxt    schedule 11.03.2015    source sumber
comment
Posting kode secukupnya sehingga kami dapat mereproduksi.   -  person Jean-François Savard    schedule 11.03.2015
comment
Silakan lihat potongan kode ini dan edit kode Anda... public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == false) { if (list.getSelectedIndex() == -1) { //No selection, disable fire button. fireButton.setEnabled(false); } else { //Selection, enable the fire button. fireButton.setEnabled(true); } } }   -  person ibrahim demir    schedule 11.03.2015
comment
Bahkan jika saya berkomentar a = Main.imagesListN.indexOf(k); Itu masih menunjukkan kesalahan yang sama   -  person Gaxt    schedule 11.03.2015


Jawaban (1)


indexOf api menerima Objek sebagai parameter, sementara get menerima Objek serta tipe primitif. Jadi ketika Anda memanggil get dengan elemen tipe primitif, ia mencari elemen berdasarkan indeks yang mungkin Anda temukan.

Tetapi ketika Anda melakukan indexOf, Anda mencari objek dalam daftar Anda dan karenanya Anda mendapatkan -1.

person SMA    schedule 11.03.2015