Exception in thread “main” java.lang.ExceptionInInitializerError Causés par: java.lang.NullPointerException
Je suis à l'aide de config.fichier de propriétés pour configurer le port. Après l'exécution, je suis confronté à une erreur:
Exception in thread "main" java.lang.ExceptionInInitializerError
Causés par: java.lang.NullPointerException à
java.util.Propriétés$LineReader.readLine(Propriétés.java:434) à
java.util.Les propriétés.load0(Propriétés.java:353) à
java.util.Les propriétés.charge(Propriétés.java:341) à
HttpServer.setPort(HttpServer.java:83) à
HttpServer.(HttpServer.java:26)
La classe principale:
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;
}
}
Je ne suis pas en mesure de comprendre ce qu'est l'erreur...
- Que pensez-vous
getResourceAsStream("src/main/config.properties")
fait et pourquoi pensez-vous ainsi? - veuillez vous référer à cette réponse sur la façon de lire les propriétés de fichier, stackoverflow.com/questions/333363/...
Vous devez vous connecter pour publier un commentaire.
Il ressemble à votre code dans un projet maven. En tant que tel,
src/main/resources/config.properties
getResourceAsStream("/config.properties")
Lors d'une maven build, maven va package de votre pot et rendre les ressources de la partie du classpath. Rien dans
resources/
fera partie de la racine du classpath, depuis que j'ai commencer avec une barre oblique lorsque j'utilise legetResourceAsStream
.Vous pouvez aussi simplement appelé:
HttpServer.class.getResourceAsStream("/config.properties")
à la place.Notez que vous ouvrez un InputStream, et de le passer à
Properties.load()
. Cela laissera le flux ouvert. De mieux à faire quelque chose comme:Le Try-With-Resources prendra soin de fermer le flux d'entrée ( même en cas d'erreur/exception).
Beaucoup ne le font pas, et même je le laisse ouvert pour de courts programmes en cours d'exécution ... Mais le vôtre suggère que c'est un Serveur HTTP ... donc mieux vaut être plus sensibles au sujet de ces caches ... connexion fuites, descripteur de fichier fuites, des fuites de mémoire, etc. Finalement, il pourrait obtenir des ordures collectées, mais mieux vaut ne pas en dépendre.