2012-03-10 89 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