Java LinkedList的bufferedImages保持不变

时间:2018-12-13 23:44:27

标签: java

我目前正在创建一个对象,该对象总共包含12个精灵。每个列表都在主列表spriteList的内部定义。
我的问题是,遍历目录中的所有文件时,我为该列表中的每个索引设置了我抓取的图像。
出于某种原因,它取决于首先显示哪个文件。有人知道为什么,我在某处做永久性引用吗?

public class EntitySprites {
   //A list containing 4 linkedlist, the first one is for up sprites, second is for right
   //third is for down, 4th is for left. Each sub list contains 3 sprites, at index 0 is the standing or idle
   //sprite, the first corespond to the first frame of the walking animation and the 2nd index is for the 
   //2nd frame of animation

   LinkedList<LinkedList<BufferedImage>> spriteList;

   public EntitySprites(String path) {
      File directory = new File(path);
      spriteList = new LinkedList<LinkedList<BufferedImage>>();

      LinkedList<BufferedImage> temp;

      for(int k = 0; k < 4; k++) {
         spriteList.add(new LinkedList<BufferedImage>());
      }

      BufferedImage ret = null;
      for(File f : directory.listFiles()) {
         String fName = f.getName();

         //Filters out all sprites that do not corespond to a walking or standing 
         if(fName.indexOf("walk") != -1 || fName.indexOf("stand") != -1) {


            try {
               ret = ImageIO.read(f);
            } catch (Exception e) {
               e.printStackTrace();

            }
            spriteList.get(getDirect(fName)).add(ret);
         }
      }
}

1 个答案:

答案 0 :(得分:1)

我假设LinkedList仅包含最后获取的图像。
原因是您在列表中添加了参考:BufferedImage ret,并更改了 添加后的参考。
换句话说就是mutable

  

变量值在程序执行期间可以更改


每次您通过
更新LinkedList时创建一个新引用 在BufferedImage ret = null;循环内移动for(File f : directory.listFiles())

try {
     spriteList.get(getDirect(fName)).add(ImageIO.read(f));
} catch (Exception e) {
      e.printStackTrace();
}

应该解决它。