【问题标题】:NullPointerException Processing 3.0NullPointerException 处理 3.0
【发布时间】:2016-11-02 14:26:36
【问题描述】:

我已经编写了几个星期的代码,但我被这个空指针异常卡住了。

它给了我以下错误:

java.lang.NullPointerException  
at processing.core.PGraphics.image(PGraphics.java:3768)     
at processing.core.PApplet.image(PApplet.java:12175)    
at beginfase.tekenBeginscherm(beginfase.java:126)   
at beginfase.draw(beginfase.java:51)    
at processing.core.PApplet.handleDraw(PApplet.java:2412)    
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1540)    
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)

它标记了这行代码:image(kaarten[r],50,50);

   String[] kaart = { 
"Aclubs.png", 
"2clubs.png", 
"3clubs.png",
"4clubs.png",
"5clubs.png",
"6clubs.png",
"7clubs.png",
"8clubs.png",
"9clubs.png",
"10clubs.png",
"Jclubs.png",
"Qclubs.png",
"Kclubs.png",
};

PImage[] kaarten = new PImage [kaart.length];

void settings() {
  size(round(displayWidth * 0.9), round(displayHeight * 0.9));
}

void setup() {
  laadBeginscherm();
 // schudKaarten();
 }



void draw() {
  tekenBeginscherm();
 // schudKaarten();
  // println(mouseX);
  //println(mouseY);
}

我的一些代码我知道它可能是一团糟而且非常糟糕,但我找不到 nullpointerexception 错误是什么。请帮忙。

是的,我现在添加了 10clubs.png

这是我用来加载图像的代码。

if (scherm == 3) {
        background(0, 148, 0);
        for (int g = 0; g < 12000; g = g+round((displayWidth * 0.9))/12) {
          int r = int (random(kaarten.length));
          println(r);
          image(kaarten[r],g+25,50);
        }      
      }

编辑: 好的,我做了一个更小的(迷你)版本的错误。它仅使用 1 张卡,但这只是示例,因此您可以自己添加 .png

    String[] kaart = { 
  "Aclubs.png", 
};


PImage[] kaarten = new PImage [kaart.length];

void setup() {
  kaart = loadImage("Aclubs.png");
}

void draw() {
  tekenBeginscherm();
}
void tekenBeginscherm() {
  if (keyPressed == true ) {
    background(0, 148, 0);
    for (int g = 0; g < 12000; g = g+round((displayWidth * 0.9))/12) {
      int r = int (random(kaarten.length));
      println(r);
      image(kaarten[r], 50, 50);
    }
  }
}

如果我尝试添加这个:kaart = loadImage("Aclubs.png"); in setup() 程序会给我这个错误:

类型不匹配,“processing.core.PImage”与“java.lang.String[]”不匹配

【问题讨论】:

  • 请发布minimal reproducible example,说明您是如何加载和显示图像的。
  • PImage[] kaarten = new PImage [kaart.length]; 使用 null 值初始化数组。您是否曾经构造过 PImage 的实例以放入数组中?
  • 您是否打算在您的String 数组中添加一个10clubs.png
  • @dorukayhan 请注意,这是一个processing 问题,并且此错误发生在处理本身内部。规范重复的答案并不真正适用于这类问题。

标签: java nullpointerexception processing


【解决方案1】:

加载图片时,您必须确保以下几点:

  • 确保您的图像文件已添加到您的草图中。它们应该在你的草图文件夹内的data 目录中。确保它们拼写正确。

  • 确保在尝试调用 image() 函数之前调用了 loadImage() 函数。

来自the reference,下面是一个展示如何加载和显示图像的小示例:

PImage img;

void setup() {
  img = loadImage("laDefense.jpg");
}

void draw() {
  image(img, 0, 0);
}

我的猜测是您忘记调用loadImage(),这意味着您的图像变量(在您的情况下为数组索引)是null,当您调用image() 函数时会导致NullPointerException

如果您仍然遇到问题,请将您的问题缩小到一个像这样的小例子。

编辑:回复您编辑的问题:

如果我尝试添加这个: kaart = loadImage("Aclubs.png");在 setup() 程序将给我这个错误:

类型不匹配,“processing.core.PImage”与“java.lang.String[]”不匹配

您需要遍历数组中的每个索引并调用loadImage() 将图像加载到每个索引中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多