我正在使用config.properties文件来设置端口。跑完后我面临一个错误:
线程“main”中的异常java.lang.ExceptionInInitializerError
引起:
的java.lang.NullPointerExceptionjava.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;
}
}
我无法理解错误是什么......
答案 0 :(得分:3)
您的代码看起来像是在maven项目中。因此,
Cron Job Call
src/main/resources/config.properties
在进行maven构建时,maven将打包jar并使资源成为类路径的一部分。 getResourceAsStream("/config.properties")
中的任何内容都将成为类路径根目录的一部分,因为当我使用resources/
时,我会用斜杠开始。
你也可以简单地打电话:
而是getResourceAsStream
。
请注意,您打开一个InputStream,并将其传递给HttpServer.class.getResourceAsStream("/config.properties")
。这将使流打开。最好做一些像:
Properties.load()
Try-With-Resources将负责关闭输入流,无论是什么(即使出现错误/异常)。
许多人不这样做,甚至我将其打开以供短期运行的程序...但是你的建议它是一个HTTP服务器...所以更好地对这些遮罩更敏感...连接泄漏,文件句柄泄漏,内存泄漏等。最终它可能会收集垃圾,但最好不要依赖它。