我正在运行此代码,它在NetBeans IDE中运行良好但是只要我构建了JAR文件并通过单击运行它就会崩溃并抛出 NullPointerException
String sepChar = File.separator;
File homeFolder = new File(System.getProperty("user.dir"));
File dataFolder = new File(homeFolder.getAbsolutePath() + sepChar + "Saved Images");
System.err.println("data files is folder: "+dataFolder.isDirectory());
System.err.println("data files is file: "+dataFolder.isFile());
System.err.println("data files: "+dataFolder.listFiles());
System.err.println("data folder: "+dataFolder);
System.err.println("data folder path : "+dataFolder.getAbsolutePath());
File[]files = dataFolder.listFiles();
for(File f:files){...}
此代码在for(File f:files)
上崩溃
代码正在访问我的闪存驱动器上的文件夹,我检查了路径及其罚款。
println staments的输出如下所示: 第一组用于IDE,第二组用于命令行:
IDE输出:
data files is folder: true
data files is file: false
data files: [Ljava.io.File;@a298b7
data folder: F:\JambTextProject\Saved Images
data folder path : F:\JambTextProject\Saved Images
命令行输出(通过运行java -jar jarName.jar获得):
data files is folder: false
data files is file: false
data files: null
data folder: F:\JambTextProject\dist\Saved Images
data folder path : F:\JambTextProject\dist\Saved Images
那可能是什么? 为什么代码在IDE中运行良好,但是从jar运行时它会崩溃? 闪存驱动器有391 MB可用空间,要访问的文件夹大小为163 MB,而磁盘大小为292 MB
答案 0 :(得分:1)
根据File.listFiles
的javadoc,方法:
如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。
因此,当您尝试迭代结果时,它为null,并发生NullPointerException。
这意味着您的IDE设置与命令行不同,例如它有一个不同的工作目录。