我已经有一个名为
Image spriteImage;
稍后在代码中我说明它是什么
Image spriteImage = new Image("content/man.png");
此代码使我的 Slick2D 应用程序崩溃。和有什么区别
Image spriteImage = new Image("content/man.png");
和
spriteImage = new Image("content/man.png");
(实际上有效)
如果“崩溃”的意思是“无法编译”,那么原因是,每当您Image spriteImage
在范围内声明(或任何其他类型/名称组合)时,您都在定义一个新变量。如果您已经有类似的声明,那么它将无法编译,说明您已经重新声明了两次相同的变量。
该声明:
Image spriteImage = new Image("content/man.png");
声明了一个名为 的新变量spriteImage
,而语句:
spriteImage = new Image("content/man.png");
正在将 的值(spriteImage
一个已经存在的变量)设置为new Image(...)
。
你重新声明一个变量。spriteImage 已经是一个图像,所以你不能将它声明为一个图像。另一种解决方案是只使用:
Image spriteImage = new Image("content/man.png");
并且不在此声明中声明它。
Image spriteImage;
这也是可以接受的,并且您不需要两次声明 spriteImage。
看起来您可能正在隐藏一个变量。
如果在您拥有的方法之外
Image spriteImage
然后在你做的方法里面
Image spriteImage = (...);
您正在分配一个局部变量spriteImage
如果你这样做
spriteImage = (...);
然后你分配先前声明的spriteImage
(大概是一个实例变量)
当您仅分配本地实例时,您将实例 1 保留为null
,我猜您尝试使用它并且有一个空指针导致 openGL 崩溃。
您已经声明了Image spriteImage但尚未对其进行初始化。
spriteImage = new Image("content/man.png");
上面是初始化它,但是
Image spriteImage = new Image("content/man.png");
正在声明一个局部 Image 变量,它隐藏了另一个变量。