在不同的机器/ PC上运行jar文件

时间:2018-12-07 09:46:24

标签: java

我有一个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"));

1 个答案:

答案 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仅使用两个不是基本变量(或数组)的变量

  • InputStream inStream;
  • 阅读器阅读器;

根据接收到的实例在构造函数中初始化数组。

其余的都是在实例中定义的,因此只能根据您传递给Properties的构造函数的方式将其设置为null。

您可以使用来检查文件内容:

String s;
while((s =in1.readLine()) != null){
    System.out.println(s);
}

(不要使用相同的读取器来加载属性,您需要重新打开一个新的读取器)