processing - 处理图像加载 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
实际上是创建两个新的局部变量并将图像加载到其中。由于它们是您的setup
函数的本地变量,因此您从中返回的变量getFlag
没有加载任何图像(它们指向null
; 因此NullPointerException
)。
为什么
当你在变量名()前面使用类型时,PImage flag_Japan = ...
它表明你正在声明一个新变量。通常,您不能声明两个具有相同名称的变量,但由于您在函数内部这样做是允许的。这个新变量的范围仅限于函数内部,因此它不会与其他同名的全局变量混淆。
因此,您从中访问的全局变量getFlag
永远不会加载任何图像。
修复它
幸运的是,修复很简单:只要确保你只声明了一组全局变量。
在处理中,项目中任何文件的代码都可以看到所有其他文件中的代码,所以这应该可以工作:
文件 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;
}
}
推荐阅读
- javascript - 如何在java脚本中找出类的整个函数
- javascript - 带有回调函数的模拟节点模块
- neo4j - 密码:索引 returnInvalid input 'i':预期的空白注释,ON,'=',节点标签
- laravel - 7级在刀片中使用一对多显示关系数据
- spring-boot - 如何使spring boot嵌入式tomcat接受gzip压缩的请求数据
- json - Json 模型类没有 getter 列表接收器实例
- php - 如何使用 Laravel 中的 API 检查 AWS 上的域名可用性?
- html - 图像不适合父元素
- python - 如何从以下 csv 制作图网络
- c++ - 使用算法和/或函数库打印矢量元素