线程“main”中的异常java.lang.ExceptionInInitializerError引起:java.lang.NullPointerException

时间:2015-05-30 19:17:55

标签: java properties

我正在使用config.properties文件来设置端口。跑完后我面临一个错误:

  

线程“main”中的异常java.lang.ExceptionInInitializerError

     

引起:

的java.lang.NullPointerException      

java.util.Properties $ LineReader.readLine(Properties.java:434)

     

中的

java.util.Properties.load0(Properties.java:353)      

中的

java.util.Properties.load(Properties.java:341)      

的HttpServer.setPort(HttpServer.java:83)      

的HttpServer。(HttpServer.java:26)

主要班级:

public class HttpServer {

    static final boolean SSL = System.getProperty("ssl") != null;
    static final int PORT = Integer.parseInt(System.getProperty("port", SSL ? "8443" : setPort()));

    public static void main(String[] args) {
        HttpServer httpServer = new HttpServer();
        httpServer.start();
    }

    public void start(){}

    public static String setPort() {
        String port = "";
        Properties properties = new Properties();
        try {
            properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("src/main/config.properties"));
            port = properties.getProperty("server.port");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return port;
    }
}

我无法理解错误是什么......

1 个答案:

答案 0 :(得分:3)

您的代码看起来像是在maven项目中。因此,

  1. 将您的媒体资源文件放在Cron Job Call
  2. 使用src/main/resources/config.properties
  3. 在进行maven构建时,maven将打包jar并使资源成为类路径的一部分。 getResourceAsStream("/config.properties")中的任何内容都将成为类路径根目录的一部分,因为当我使用resources/时,我会用斜杠开始。

    你也可以简单地打电话: 而是getResourceAsStream

    请注意,您打开一个InputStream,并将其传递给HttpServer.class.getResourceAsStream("/config.properties")。这将使流打开。最好做一些像:

    Properties.load()

    Try-With-Resources将负责关闭输入流,无论是什么(即使出现错误/异常)。

    许多人不这样做,甚至我将其打开以供短期运行的程序...但是你的建议它是一个HTTP服务器...所以更好地对这些遮罩更敏感...连接泄漏,文件句柄泄漏,内存泄漏等。最终它可能会收集垃圾,但最好不要依赖它。