处理图片加载 NullPointerException
Processing image loading NullPointerException
我正在处理一个处理项目,我正在尝试添加代码来加载和显示标志。
代码如下所示:
在setup()函数里面,有这段加载图片的代码:
PImage flag_Japan = loadImage("Flag_Japan.png");
PImage flag_None = loadImage("Flag_None.png");
在另一个文件(链接到第一个文件)中,所有函数之外都有这段代码,用于将标志图像声明为全局变量并从国家名称中获取它们:
PImage flag_Japan;
PImage flag_None;
PImage getFlag(String s) {
switch(s) {
case "Japan": return flag_Japan;
default: return flag_None;
}
}
最后,在 draw() 中调用的函数中,有这段代码可以显示它们:
println(getCountry(pe.name)); //testing, prints "Japan"
image(getFlag(getCountry(pe.name)), X_MIN+5, y+5);
数据文件夹包含这些文件:
当我 运行 处理代码时,我在显示代码行(使用 image() 函数的代码行)上得到一个 NullPointerException。代码出了什么问题?在处理中有没有更高效的加载和显示多个国旗的方式?
您在 setup
中的代码实际上是在创建两个新的 local 变量并将图像加载到其中。由于它们是您的 setup
函数的本地变量,因此您从 getFlag
返回的变量没有加载任何图像(它们指向 null
;因此 NullPointerException
).
为什么
当您在变量名 (PImage flag_Japan = ...
) 前使用类型时,表示您正在声明一个 new 变量。通常你不能声明两个具有相同名称的变量,但因为你是在函数内部这样做是允许的。这个新变量的范围限定为仅在函数内部可用,因此它不会与其他同名的全局变量混淆。
因此,您从 getFlag
访问的全局变量永远不会将任何图像加载到其中。
修复它
幸运的是,修复很简单:只需确保只声明 一个 组全局变量。
在 Processing 中,项目中任何文件中的代码都可以看到所有其他文件中的代码,因此这应该有效:
文件 1:
// declaring global variables to be used everywhere
PImage flag_Japan;
PImage flag_None;
void setup() {
// load images into the global variables
// note: no PImage type here so we don't accidentally create new variables
flag_Japan = loadImage("Flag_Japan.png");
flag_None = loadImage("Flag_None.png");
}
文件 2:
// don't re-declare the variables here
// we can access the global ones from File 1
PImage getFlag(String s) {
switch(s) {
case "Japan": return flag_Japan;
default: return flag_None;
}
}
我正在处理一个处理项目,我正在尝试添加代码来加载和显示标志。
代码如下所示:
在setup()函数里面,有这段加载图片的代码:
PImage flag_Japan = loadImage("Flag_Japan.png");
PImage flag_None = loadImage("Flag_None.png");
在另一个文件(链接到第一个文件)中,所有函数之外都有这段代码,用于将标志图像声明为全局变量并从国家名称中获取它们:
PImage flag_Japan;
PImage flag_None;
PImage getFlag(String s) {
switch(s) {
case "Japan": return flag_Japan;
default: return flag_None;
}
}
最后,在 draw() 中调用的函数中,有这段代码可以显示它们:
println(getCountry(pe.name)); //testing, prints "Japan"
image(getFlag(getCountry(pe.name)), X_MIN+5, y+5);
数据文件夹包含这些文件:
当我 运行 处理代码时,我在显示代码行(使用 image() 函数的代码行)上得到一个 NullPointerException。代码出了什么问题?在处理中有没有更高效的加载和显示多个国旗的方式?
您在 setup
中的代码实际上是在创建两个新的 local 变量并将图像加载到其中。由于它们是您的 setup
函数的本地变量,因此您从 getFlag
返回的变量没有加载任何图像(它们指向 null
;因此 NullPointerException
).
为什么
当您在变量名 (PImage flag_Japan = ...
) 前使用类型时,表示您正在声明一个 new 变量。通常你不能声明两个具有相同名称的变量,但因为你是在函数内部这样做是允许的。这个新变量的范围限定为仅在函数内部可用,因此它不会与其他同名的全局变量混淆。
因此,您从 getFlag
访问的全局变量永远不会将任何图像加载到其中。
修复它
幸运的是,修复很简单:只需确保只声明 一个 组全局变量。
在 Processing 中,项目中任何文件中的代码都可以看到所有其他文件中的代码,因此这应该有效:
文件 1:
// declaring global variables to be used everywhere
PImage flag_Japan;
PImage flag_None;
void setup() {
// load images into the global variables
// note: no PImage type here so we don't accidentally create new variables
flag_Japan = loadImage("Flag_Japan.png");
flag_None = loadImage("Flag_None.png");
}
文件 2:
// don't re-declare the variables here
// we can access the global ones from File 1
PImage getFlag(String s) {
switch(s) {
case "Japan": return flag_Japan;
default: return flag_None;
}
}