2016-08-22 4 views
0

私は再現できないユーザーから報告された問題があります。変数があることが判明したとして(バージョンを含む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ファイルを解凍することによって)。彼はそれを私に送った、それははそのままだった

+2

かなり明白です:何かが 'null'、おそらく' in'です。あなたは 'getClassLoader()。getResourceAsStream("/version ")'を試みましたか? – chrylis

+0

@xenterosあなたは真剣であるかトローリングしていますか?これは一般的なヌルポインタ例外の問題のように見えますか? –

+0

私は、Scannerに渡すInputStreamをnullにすることはできませんが、Resourceが利用できないためです。あなたの前提を確認してください。 – duffymo

答えて

1

IDEでコードを実行しましたが、これはビルドされたJARファイルをまったく使用しませんでした。コンパイルステップで生成されたディレクトリ階層を使用します。ここで行う必要があるのは、出荷されたJARファイルの内容を確認することです。は明らかにには/versionが含まれていません。この問題を再現する方法は、クリーンインストールで、顧客が行ったのと同じ方法で同じJARファイルを実行することです。しかし、それはあなたが本当に求めていることではありません。 ソリューションは、リソースのをに置き換え、バージョン情報を出荷することを忘れることのできないJARマニフェストに入れます。

+0

jarマニフェストを推薦してくれてありがとう、私はそれを調べるでしょう。それ以外の場合、私はあなたの信頼に驚いています。私は同じリリースをダウンロードしました。それは私の質問で書かれている、私はそれがビルドされたバージョンを実行したことを明確にするために編集されます。 –

+0

私は、ファイルがあることを確認するようユーザーに頼んだ。彼は私にそれを送った、それはそのままだった。 –

0

ユーザーはMacAfeeウイルス対策ソフトウェア(PCと一緒に配布されている)をアンインストールし、Avast!これが問題を解決したことを示しています。プログラミングの答えは正確ではありませんが、誰かが同じ問題に直面した場合に備えてこれを共有することにしました。

関連する問題