我有一个jar文件和一个配置文件,它们都在同一目录中。 jar文件运行时将读取配置文件中的一些值。
我在命令提示符下运行了jar文件。一切正常。因此,我决定将相同的jar文件和配置文件发送给另一个人,以使用相同的方法在其PC中进行测试。但是,这在他出现此错误的PC上不起作用:
D:\QA06122018_2>java -jar removeOldRecords.jar
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at Indexing.remove_old_records(Indexing.java:229)
at Main.main(Main.java:42)
看来他的电脑无法读取配置文件。
注意:我们都运行了相同的命令和相同的文件。
是否有可能无法在他的PC上正常工作?
编辑:
从jar读取配置文件的代码:
Properties props=new Properties();
String path ="./config.properties";
FileInputStream fis=new FileInputStream(path);
BufferedReader in1=new BufferedReader(new InputStreamReader(fis));
props.load(in1);
in1.close();
int days=Integer.parseInt(props.getProperty("value2"));
答案 0 :(得分:0)
在JDK_1.8.131中检查方法“ java.util.Properties $ LineReader.readLine”,我没有找到很多可以提供NPE的解决方案。
我唯一的方法是将null
实例传递给Properties
构造函数,而提供的代码则不能。
如果您尽快关闭阅读器,则会出现另一个错误
java.io.IOException: Stream closed
如果找不到该文件:
java.io.FileNotFoundException: ./config.properties (The system cannot find the file specified)
这是我发现抛出NPE的唯一方法:
props.load((Reader) null);
原因很简单,实例LineReader
仅使用两个不是基本变量(或数组)的变量
根据接收到的实例在构造函数中初始化数组。
其余的都是在实例中定义的,因此只能根据您传递给Properties
的构造函数的方式将其设置为null。
您可以使用来检查文件内容:
String s;
while((s =in1.readLine()) != null){
System.out.println(s);
}
(不要使用相同的读取器来加载属性,您需要重新打开一个新的读取器)