2015-09-26 89 views
0

我正在爲項目製作啓動畫面,其中顯示圖標並顯示加載欄。加載欄等工程。這裏是圖像加載並分配代碼:圖像未加載JLable

initComponents(); 
BufferedImage buff = null; 
try 
{ 
    buff = ImageIO.read(getClass().getResourceAsStream("/Resources/Barcode-icon.png")); 
} catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
lblSplash = new JLabel(new ImageIcon(buff)); 
this.setVisible(true); 

將其加入飛濺類的構造函數,但它表明了破碎的形象圖標運行時...

任何幫助表示讚賞(強調幫助,我想學習,沒有代碼示例答案

編輯:添加了此代碼,從來沒有發射:

if(new File("/Resources/Barcode-icon.png").exists()) 
{ 
    JOptionPane.showMessageDialog(null, "exists"); 
} 

也改變文件串到別的東西導致程序崩潰,都嘗試

「資源/條形碼的icon.png」 「SRC /資源/條形碼的icon.png」 也就導致空輸入ImageIO.read(...)方法

回答

1

資源不是文件,所以文件存在並不能證明資源存在,實際上不可能相同的路徑對兩者都有效。資源通常在jar文件本身中,儘管它也可以位於classpath中目錄的相應子目錄中。

將getResourceAsStream()的結果放入變量中以確保它不爲null。

「/Resources/Barcode-icon.png」並不意味着你應該找到你的計算機上的文件,這意味着你應該找到它,如果你解壓縮,你是在發佈應用程序的jar文件。

您需要告訴您的構建系統或IDE將其放入jar文件中。通常這意味着放入一個特殊的目錄,但不會傳遞給getResourcesAsStream()。

使用Netbeans Ant項目(Java的默認類型),將文件放在src子目錄下,但不要將src /添加到資源字符串中。

如 的src/DIR/lena1.png與getResourcesAsStream( 「DIR/lena1.png」)訪問

還要注意getResourcesAsStream( 「/ DIR/lena1.png」)將無法正常工作。

+0

該項目將被分配作爲一個罐子,這裏的資源仍然無法正常工作,已經過測試 – Kyle

+0

它似乎是'lblSplash = new JLabel(新的ImageIcon(buff))'的問題;',而不是資源加載。我在這個問題中說過:「另外將文件字符串更改爲其他內容會使程序崩潰,同時嘗試使用」 – Kyle

+0

「文件字符串會影響程序嘗試加載的內容,但由於更改它會使其崩潰,所以它必須表示原始文件存在它可以訪問它 – Kyle

0

唉...它的小東西...

使用JLable.setIcon(buff)作品,其中的buff是資源,而不是流

+0

我會接受比我自己更好的答案 – Kyle