Хорошо, у меня есть проблема, я не могу понять, что не так. Итак, у меня есть 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 (список имен). Исключение в
a = Main.imagesListN.indexOf(k);
это дает мне -1 , но h = Main.imagesListN.get(k); дает мне нужную ссылку и передает ее ImageIcon img = new ImageIcon(h); em>, а затем 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() находится в основном, listListener находится в классе Langas (класс, в котором все кнопки, метки и т. д. больше ничего не создают) и Thread well, Thread. Также он отлично работает после того, как все загружено, без исключений. Во время загрузки появляется ошибка
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