如何从文件夹中加载所有图像?(处理,Java)

如何从文件夹中加载所有图像?(处理,Java),java,image,processing,loadimage,Java,Image,Processing,Loadimage,请帮帮我。我想在不知道数据名的情况下将多个图像加载到此处理草图中。这样我就可以把.png图像放进数据文件夹,程序会自动加载它们。我在一些论坛上搜索过,但除了一些我已经使用过但运行不正常的代码外,什么也没找到 程序启动后,会在image()处给我一个NullPointerException 这是控制台输出: 4096 D:\Program Files\processing-3.3.7\PROJECTS\Blendertutorial\data [0] "1.png" [1] "2.png" [2]

请帮帮我。我想在不知道数据名的情况下将多个图像加载到此处理草图中。这样我就可以把
.png
图像放进数据文件夹,程序会自动加载它们。我在一些论坛上搜索过,但除了一些我已经使用过但运行不正常的代码外,什么也没找到

程序启动后,会在
image()处给我一个
NullPointerException

这是控制台输出:

4096
D:\Program Files\processing-3.3.7\PROJECTS\Blendertutorial\data
[0] "1.png"
[1] "2.png"
[2] "3.png"
[3] "4.png"
[4] "5.png"
[5] "6.png"
[6] "7.png"
还有为什么是
文件夹.list()输出这么大的数字?我这里只有7张图片…

import java.io.File;
String fileExtension = ".png";

java.io.File folder = new java.io.File(sketchPath("/PROJECTS/Blendertutorial/data"));
java.io.FilenameFilter extfilter = new java.io.FilenameFilter() {
  boolean accept(File dir, String name) {
    return name.toLowerCase().endsWith(fileExtension);
  }
};

PImage images;
String[] imageNames;
int i=0;
long folderInhalt = folder.length();

void setup(){
  size(500,500);
  println(folder.length());
  println(folder);
  printArray(imageNames);

  imageNames = folder.list(extfilter);
}

void draw(){
  if(mousePressed){
    images = loadImage(folder+"/"+imageNames[0]);
    println(images);
    println(imageNames[i]);
    delay(200);
    i++;
  }
  image(images,0,0);      //NULL POINTER EXCEPTION!
}

调用draw()时,如果
mousePressed
为false,代码中会发生什么

考虑您的代码:

PImage images;
...
...
...

void draw(){
  if(mousePressed){
    images = loadImage(folder+"/"+imageNames[0]);
    println(images);
    println(imageNames[i]);
    delay(200);
    i++;
  }
  image(images,0,0);      //NULL POINTER EXCEPTION!
}
您已经声明了
图像
,但尚未实例化它

如果
mousePressed==false
图像将保持为空

此行为可以解释您的
NullPointerException
-您正在使用空值参数调用
image
方法

public void readImagesPath(String dir){
   File folder = new File(dir);
   File[] listOfFiles = folder.listFiles();

    for (File file : listOfFiles) {
      if (file.isFile()) {
         System.out.println(file.getName());
      }
    }
 }
使用此代码,您可以检索图像路径,然后加载并绘制它们

为什么文件夹是.list();产量这么大?我只有7张照片在那里

您没有调用文件夹.list()
。您正在调用
folder.length()
。此函数返回文件的大小,该大小对于文件夹是未定义的。更多信息可在中找到

另外,这与您的问题没有直接关系,但是您不应该像这样在
draw()
函数中加载图像。改为从
setup()
函数加载它们。否则,您将每秒加载图像60次,这将导致您的计算机着火


将加载移动到
setup()
也将解决
NullPointerException
问题,因为当鼠标未按下时,您将不再绘制空图像。

与您的问题没有直接关系,但您不应在
draw()
函数中加载图像。改为从
setup()
函数加载它们。否则,您将每秒加载图像60次,这将导致您的计算机着火。谢谢。我只是在这个例子中这样做,因为我调用delay(),因为我不希望它在需要的时候“预加载”bu load。问题是鼠标会被按下一帧以上,所以你不断地重新加载图像。至少你应该缓存你的图像,这样你就不会多次重新加载它们,但最有可能的是你应该在安装过程中加载它们。嘿,但是我只能将加载放入setup(),其余的仍然必须放入draw(),因为我想更新它mouseclick@OliverTworkowski那很好。您应该将加载放入
setup()
中,然后在
draw()中单击鼠标“代码”