Unable to get a variable unless it's static
我有一个类,它有一些bufferedImage的数组列表,但是我有一个严重的问题。有两种可能性:
-数组列表都是静态的,所以它们的获取方法是:这很好,因为应用程序正在启动,动画运行得很好。但我不能有不同的动画,因为有静态。
-arraylist(及其getter)不是静态的:当调用getdown()时,我会得到一个nullpointerException,它指向调用这个函数的精确时刻。
在那之前,我使用简单的数组,我相信使用数组列表可以解决这个问题,但是没有区别。
我不明白为什么要这样做,你能帮我一下吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | public class AnimUnit { private static final int width = 32, height = 32, nbframe = 4; private ArrayList<BufferedImage> down; private ArrayList<BufferedImage> up; private ArrayList<BufferedImage> right; private ArrayList<BufferedImage> left; private ArrayList<BufferedImage> idle; public AnimUnit(SpriteSheet sheet) { this.down = new ArrayList<BufferedImage>(); this.up = new ArrayList<BufferedImage>(); this.left = new ArrayList<BufferedImage>(); this.right = new ArrayList<BufferedImage>(); this.idle = new ArrayList<BufferedImage>(); for(int i = 0; i < nbframe; i++) down.add(sheet.crop((width*2)+2, (height*i)+i, width, height)); for(int i = 0; i < nbframe; i++) up.add(sheet.crop((width*3)+3, (height*i)+i, width, height)); for(int i = 0; i < nbframe; i++) left.add(sheet.crop((width)+1, (height*i)+i, width, height)); for(int i = 0; i < nbframe; i++) right.add(sheet.crop((width*4)+4, (height*i)+i, width, height)); for(int i = 1; i < nbframe; i++) idle.add(sheet.crop(0, (height*i)+i, width, height)); } public static int getWidth() { return width; } public static int getHeight() { return height; } public ArrayList<BufferedImage> getDown() { return down; } public ArrayList<BufferedImage> getUp() { return up; } public ArrayList<BufferedImage> getRight() { return right; } public ArrayList<BufferedImage> getLeft() { return left; } public ArrayList<BufferedImage> getIdle() { return idle; } |
从所有属性和方法中删除单词"static",每当初始化为空时,请将其初始化为"static"。
例子:
而不是:
1 |
尝试:
1 |
当前,类中维护的属性都是静态的。您正在使用构造函数为它们赋值,这可能会误导类的用户,因为类没有非静态属性。如果没有调用构造函数,那么它们就不会被初始化(并且在访问时会引发空指针异常),但是一个只包含静态方法的构造对象是没有用的。
从所有的属性和方法中去掉"static"这个词,我认为它会按照您希望和期望的方式工作。
1 2 3 4 | AnimUnit animUnitA=new animUnit(spriteSheetA); AnimUnit animUnitB=new animUnit(spriteSheetB); ArrayList<BufferedImage> downA=animUnitA.getDown(); ArrayList<BufferedImage> downB=animUnitB.getDown(); |
好吧,我刚刚做了一些测试,最终发现nullpointerException是关于animunit类本身的一个实例,而不是ArrayList。不管怎样,多亏了所有,即使问题根本不是关于阵列的。