[解決済み] スレッド "main" での例外 java.lang.ExceptionInitializerError Caused by: java.lang.NullPointerException
質問
ポートを設定するためにconfig.propertiesファイルを使用しています。実行後、エラーになります。
スレッドで例外発生 "main" java.lang.ExceptionInInitializerError
原因:java.lang.NullPointerException at
java.util.Properties$LineReader.readLine(Properties.java:434) at
java.util.Properties.load0(Properties.java:353) at
java.util.Properties.load(Properties.java:341) at
HttpServer.setPort(HttpServer.java:83) at
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;
}
}
何がエラーなのか理解できませんが...。
どうすればいいですか?
あなたのコードは、mavenプロジェクトにあるようです。このように
-
プロパティファイルを
src/main/resources/config.properties
-
使用
getResourceAsStream("/config.properties")
mavenでビルドする場合、mavenはあなたのjarをパッケージ化し、リソースをクラスパスの一部にします。このとき
resources/
を使うときはスラッシュで始めるので、クラスパスのルートの一部になります。
getResourceAsStream
.
また、単純に呼び出すこともできたはずです。
HttpServer.class.getResourceAsStream("/config.properties")
の代わりに
InputStreamをオープンし、それを
Properties.load()
. これでは、ストリームが開いたままになってしまいます。のようにするのがベターです。
try (InputStream is = HttpServer.class.getResourceAsStream("/config.properties") ) {
properties.load(is);
}
Try-With-Resourcesは、何があっても(エラーや例外が発生しても)入力ストリームを閉じるように配慮しています。
多くの人はそうしないし、私だって短時間のプログラムなら開いたままにしている.しかし、あなたの場合は、それがHTTPサーバーであることを示唆している...したがって、これらのマットについてより敏感である方が良い...接続リーク、ファイルハンドルリーク、メモリリークなど。最終的にはガベージコレクションされるかもしれないが、それに依存しない方が良い。
関連
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] 現在のスレッドがメインスレッドでないことを確認する方法
-
[解決済み】メインスレッドで他のスレッドからコードを実行する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み] Javaパッケージからのプロパティファイルの読み込み