好吧,我有一个问题,我无法弄清楚什么是错的。所以我有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。一切都下载后也可以正常工作,没有例外。在下载过程中出现错误
答案 0 :(得分:0)
indexOf api接受Object作为参数,而get接受Object和原始类型。因此,当您使用原始类型元素调用get时,它会按您可能找到的索引查找元素。
但是当你做indexOf时,你正在列表中搜索一个对象,因此得到-1。