2015-07-20 69 views
0

我試圖從位於src > Truss > xml的文件夾讀取一些xml文件的名稱。主要課程在Truss目錄中。它讀取當程序從Eclipse中運行時導出到一個jar和運行但引發此錯誤的文件罰款:(此錯誤是由CMD複製,不偏食控制檯)從BufferedReader讀取時出現NullPointerException,僅當以罐子的形式運行時

java.lang.NullPointerException 
     at java.io.FilterInputStream.read(Unknown Source) 
     at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) 
     at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
     at sun.nio.cs.StreamDecoder.read(Unknown Source) 
     at java.io.InputStreamReader.read(Unknown Source) 
     at java.io.BufferedReader.fill(Unknown Source) 
     at java.io.BufferedReader.readLine(Unknown Source) 
     at java.io.BufferedReader.readLine(Unknown Source) 
     at Truss.main.initiate(main.java:167) 
     at Truss.main.<init>(main.java:729) 
     at Truss.main.main(main.java:110) 

下面是代碼:

try { 
    InputStream in = main.class.getResourceAsStream("xml"); 
    BufferedReader input = new BufferedReader(new InputStreamReader(in)); 

    String profileName; 

    while((profileName = input.readLine()) != null) { 
     loadProfile(profileName.substring(0, profileName.length() - 4)); 
    } 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

while循環的構造器管線167

+1

可能資源不包含在JAR中,或者位於其中的不同文件夾中。打開JAR並檢查。 – m0skit0

+0

另外,剛剛進行了雙重檢查,您可以在while循環內放置類似print語句的內容,以查看它是在第一次迭代還是在幾個循環後發生? –

+0

我一直在試圖打開jar,但無法使歸檔工具正常工作。我試圖將它添加到我的路徑變量,但它不起作用。 –

回答

1

顯然getResourceAsStream()返回null,而你沒有檢查它。

請求的資源不在該名稱下的JAR文件中。

+0

我該如何將它添加到該名稱下的jar文件中? –

+0

他在while行發生錯誤。如果「in」爲空,他會得到NPE的BufferedReader的構造,而不是在while行。或者我錯了,@AlexA? –

+0

@AlexA使用JAR工具或IDE。正如您在'main.class'所在的包中將它看作一個名爲'「xml」'的文件,那就是它應該在的位置。 – EJP

0

從你所顯示的信息中,我只能猜測你沒有在jar中正確打包資源文件。請看看這個related question。請注意,資源文件夾應位於src文件夾(其中.java文件所在的目錄)下,而不是生成文件夾(.class文件)。

更新

只注意到你的 「XML」 實際上是一個文件夾,您不能使用的getResourceAsStream()。 This answer顯示了一種列舉可能是您的解決方案的jar條目的方法。

+0

鏈接問題的接受答案不正確。資源不是文件或目錄,不能使用「File」類列出。儘管如此,海報的抗議活動仍在繼續。 – EJP

+0

@EJP是的,你是對的...似乎上市jar條目是唯一的解決方案? –

+0

Thankyou !!!!這工作!還要感謝幫助我的其他人! –

相關問題