2012-03-10 127 views
0

我有一個目錄結構,我的個人項目:Ant和jar目錄結構

mines/ 
build.xml 
build/ 
build/classes/ 
build/jar/ 
src/minesweeper 
src/minesweeper/view/ 
src/minesweeper/model/ 
res/img/ 

和我build.xml文件是:

<project> 
<target name="clean"> 
    <delete dir="build"/> 
</target> 

<target name="compile"> 
    <mkdir dir="build/classes"/> 
    <javac srcdir="src" destdir="build/classes"/> 
</target> 

<target name="jar"> 
    <mkdir dir="build/jar"/> 
    <jar destfile="build/jar/minesweeper-clone.jar" basedir="build/classes"> 
     <manifest> 
      <attribute name="Main-Class" value="minesweeper.Minesweeper"/> 
     </manifest> 
    </jar> 
</target> 

<target name="run"> 
    <java jar="build/jar/minesweeper-clone.jar" fork="true"/> 
</target> 

在Ubuntu中,我做的:

$ant compile jar run 

,一切都很好。但如果我這樣做:

$java -jar minesweeper.jar 

該程序運行,但圖標不顯示。

在我src/minesweeper/view/GameFrame.java I類有:

private static final String NEW_GAME_ICON = "res/img/new_game.png"; 

new_game.pngres/img/new_game.png

我知道如果我這樣做:

$java -jar build/jar/minesweeper-clone.jar 

它可以完美運行,並且顯示的圖標,但我想只在窗口中執行jar文件(沒有我的項目的整個目錄)。

謝謝。

編輯
我訪問的資源的方法是:

JMenuItem newGameItem1 = new JMenuItem("New game", new ImageIcon(NEW_GAME_ICON)); 

回答

1

你想包括資源放進瓶子本身,並使用此API讀取文件:

getResourceAsStream

所以首先你需要確保資源在jar中(打開它並確保它在那裏),並且確保你使用的是API ca如此,而不是文件IO機制(因爲圖像將在jar中;不在文件系統上)。

+0

謝謝。圖標不在罐子裏。我是否需要修改build.xml以添加圖標? – 2012-03-10 00:48:12

+0

@enrmarc ...如果你想擁有一切在罐子裏,那麼當然。 – 2012-03-10 01:05:24

+0

@DaveNewton我已經添加了圖標,但問題仍然存在。 res /文件夾與META-INF /和掃雷/相同。我認爲問題是圖像路徑,但如果我將「res/img/new_game.png」更改爲「../../res/img/new_game.png」,那麼當我執行「ant jar」時,圖標不是顯示。如果我執行'java -jar minesweeper.jar',則會顯示圖標。那麼有沒有辦法用ant和java -jar來執行jar並顯示圖標? – 2012-03-10 01:20:46