私は再現できないユーザーから報告された問題があります。変数があることが判明したとして(バージョンを含むclass.getResourceAsStreamは、ユーザのマシンでnullを返します。どのように再現するのですか?
private VersionId VERSION = new VersionId("0.0-error");
public final VersionId getVersion() {
if(VERSION.affix.equals("error")) {
InputStream in = Main.class.getResourceAsStream("/version");
Scanner sc = new Scanner(in, "UTF-8"); // LINE 86
VERSION = new VersionId(sc.useDelimiter("\\A").next());
}
return VERSION;
}
私はここで行うことはアプリケーションのバージョン情報が含まれている内部リソースを解析することです。このコードでは
Exception in thread "main" java.lang.NullPointerException: source at java.util.Objects.requireNonNull(Unknown Source) at java.util.Scanner.(Unknown Source) at cz.autoclient.Main.getVersion(Main.java:86) at cz.autoclient.Main.(Main.java:76) at cz.autoclient.Main.main(Main.java:262)
:問題は誤りであります非常に実用的ではない)。
バージョンのファイルは次のようになります:
v3.5-beta
エラーが到達不能であること、リソース"/version"
によって引き起こされているように見えます。このエラーはユーザーにのみ発生するように見えるので、私はなぜそれがかもしれない助けが必要です。ユーザーのJavaバージョンは
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
ここでは完全なMain.java
(specific commit)です。アプリケーションはjar
ファイルとして配布されています。ファイルversion
は、jarファイルのルートにあります。
私が同じリリース(リリースサイトからダウンロードした、再構築していない)を実行すると、問題がであるとわかりません。問題は発生しません。私は、ユーザーにファイルがあることを確認するように頼んだ(jarファイルを解凍することによって)。彼はそれを私に送った、それははそのままだった。
かなり明白です:何かが 'null'、おそらく' in'です。あなたは 'getClassLoader()。getResourceAsStream("/version ")'を試みましたか? – chrylis
@xenterosあなたは真剣であるかトローリングしていますか?これは一般的なヌルポインタ例外の問題のように見えますか? –
私は、Scannerに渡すInputStreamをnullにすることはできませんが、Resourceが利用できないためです。あなたの前提を確認してください。 – duffymo