【发布时间】:2015-10-12 16:51:19
【问题描述】:
我正在运行此代码,它在 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 语句的输出如下所示: 第一组用于 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
【问题讨论】:
-
你应该阅读
File.listFiles的javadoc。 -
抛出 NPE 的不是 listFiles 方法,而是您试图在增强的 for 循环中迭代结果。
-
问题不在于 NullPointer,问题在于代码在 IDE 和命令行中的行为为何不同
-
jar文件位于dist文件夹中,但您在 IDE 中的代码是直接从JambTextProject执行的,至少从程序输出的路径来看是这样的 @ 987654330@ 和F:\JambTextProject\dist\Saved Images