将文件复制到另一个文件夹会引发java.lang.NullPointerException

将文件复制到另一个文件夹会引发java.lang.NullPointerException,java,javafx,file-io,nullpointerexception,Java,Javafx,File Io,Nullpointerexception,程序会提示用户使用FileChooser选择一个或多个文件。我将其保存到列表中,然后将该列表发送到下面的此方法。然后,在选择文件并按save之后,我在堆栈跟踪中得到了一个NullPointerException。程序之后仍然保持运行,并且它成功地复制了文件。问题是,这里到底是什么指向null???我在java方面的经验不足一年 public class PhotoManager { private final FileChooser fileChooser = new FileChoo

程序会提示用户使用FileChooser选择一个或多个文件。
我将其保存到列表中,然后将该列表发送到下面的此方法。然后,在选择文件并按save之后,我在堆栈跟踪中得到了一个NullPointerException。
程序之后仍然保持运行,并且它成功地复制了文件。
问题是,这里到底是什么指向null???我在java方面的经验不足一年

public class PhotoManager {

    private final FileChooser fileChooser = new FileChooser();
    private final String pathname = "C:\\JavaAlbumApp";
    private final File dir = new File(pathname);
    //private final Desktop desktop = Desktop.getDesktop();
    protected List<File> photos;

    PhotoManager()
    {


        // If the default directory JavaAlbumApp doesn't exist then create it.
        boolean exists = dir.exists();
        try
        {
            if(!exists)dir.mkdir();    
        }
        catch(SecurityException se)
        {
            System.out.println("Could not create directory");
        }

    }

protected void importFile(Stage primaryStage) 
{ 
        // Set extension filters
        setExtFilters();
        // Set title
        fileChooser.setTitle("Select Picture/s");
        // Prompt user to select the photo/s they want to copy/save
        photos = fileChooser.showOpenMultipleDialog(primaryStage);
        copyFileUsingJava7Files();

    System.out.println(fileChooser.getTitle()); // Select Picture/s
    System.out.println(fileChooser.toString()); // javafx.stage.FileChooser@229f9227
    System.out.println(fileChooser.getInitialFileName()); // null
    System.out.println(fileChooser.getInitialDirectory().getName()); //JavaAlbumApp
    System.out.println(fileChooser.getInitialDirectory().toString()); //C:\JavaAlbumApp
    System.out.println(fileChooser.getInitialDirectory().getPath()); //C:\JavaAlbumApp
    System.out.println(fileChooser.getInitialDirectory().getAbsolutePath()); //C:\JavaAlbumApp
    System.out.println(fileChooser.getInitialDirectory().getParent()); //C:\
}

 private void copyFileUsingJava7Files()
 {   // Step 1: 
     // Copy list of photos to dir variable "C:\\JavaAlbumApp".  
    for(File photo : photos)
    {
        if(photo != null)
        {
            try{
                Files.copy(photo.toPath(), dir.toPath().resolve(photo.getName()));
               //this.desktop.open(photo);
            } catch(IOException e){
               e.printStackTrace();
            }
        }
    }
 }
}

我相信你的问题在于这一行:

photos = fileChooser.showOpenMultipleDialog(primaryStage);
Javadoc for FileChooser#showOpenMultipleDialog表示,如果未选择任何文件,它将返回null


当copyFileUsingJava7Files()尝试迭代设置为null的照片集合时,null指针出现在(文件照片:照片)的
处。

fileChooser在哪里初始化?在最顶部的“公共类照片管理器”下。NPE出现在
PhotoManager.importFile(PhotoManager.java:61)
,这一行指的是哪一条语句?仅指System.out.println(fileChooser.toString());因为我想看看它会打印什么。为了简单起见,我从代码中排除了它。我想我可能是错误地复制和粘贴了一个过时的stacktrace。我刚刚更新了堆栈跟踪。抱歉,所以要解决这个问题,我必须预先设置一些照片?我不明白,因为程序成功地将图像存储到照片列表中。我知道是这样的,因为我检查了我的目录,所有的照片都被成功复制了。理想情况下,你应该试着理解为什么FileChooser在保存时不知道选择了哪个文件。好的,谢谢,我会研究它。
photos = fileChooser.showOpenMultipleDialog(primaryStage);