我搜索过类似的问题,但他们没有涉及for循环。 我有以下代码:
image = new BufferedImage[maxFiles];
for (int i = 0; i < maxFiles; i++) {
new Thread(){
public void run() {
try {
file = new File("0" + i + ".jpg");
image[i] = ImageIO.read(file);
} catch (IOException e) {e.printStackTrace();}
}
};
}
正如您所看到的,我希望通过自己的线程加载每个图像文件以优化一点。 不幸的是,for循环的变量 i 无法通过 run 方法传递,我无法将其设为final或static。你会如何解决这个问题?
答案 0 :(得分:5)
您可以拥有一个具有相同值的最终变量。
image = new BufferedImage[maxFiles];
for (int i = 0; i < maxFiles; i++) {
final int index = i;
new Thread(){
public void run() {
try {
file = new File("0" + index + ".jpg");
image[index] = ImageIO.read(file);
} catch (IOException e) {e.printStackTrace();}
}
};
}
你可能也想开始你的主题。
答案 1 :(得分:0)
除了@ khelwood的解决方案,您还可以在匿名类中使用实例变量:
for (int i = 0; i < maxFiles; i++) {
new Thread() {
// Capture i here.
int index = i;
public void run() {
try {
file = new File("0" + index + ".jpg");
image[index] = ImageIO.read(file);
} catch (IOException e) {
e.printStackTrace();
}
}
};
}