Хорошо, у меня есть проблема, которую я не могу понять, что не так. Поэтому у меня есть jList и List. Мне нужна функция, которая когда я нажимаю на элемент (в jList любом элементе), и он изменился бы на мой значок ярлыка (я имею дело с изображениями). Он работает как-то, он меняет значок ярлыка на изображение, которое я выбираю из jList, но это бросает меня Исключение, и программа вылетает, как правило, первые 2 элемента не вызывают ошибок, из-за чего возникают третьи и другие элементы. После того, как он падает и бросает мне кучу красного текста, я все равно могу изменить свой значок.Индекс массива Java Out Of Bounds Исключение: -1
Это функция, где я получаю изображения и добавить их в список (добавление пути к ним)
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. Btw Я использую все в 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() в основном, listListener в классе Langas (класс, где все кнопки, метки и т. Д. Больше ничего не создаются) и Thread хорошо, Thread. Также он отлично работает после того, как все загружено, никаких исключений. Появляется ошибка durring downloading proccess
Post достаточноt код поэтому можем воспроизвести. –
Пожалуйста, посмотрите на этот кусок кода и редактировать ваши ... 'общественности недействительным ValueChanged (ListSelectionEvent е) { если (e.getValueIsAdjusting() == FALSE) { если (list.getSelectedIndex() = = -1) { // Нет выбора, отключить кнопку огня. fireButton.setEnabled (false); } else { // Выбор, включение кнопки огня. fireButton.setEnabled (true); } } } ' –
Даже если я прокомментирую a = Main.imagesListN.indexOf (k); Он по-прежнему показывает ту же ошибку – Gaxt