为程序创建一个.jar文件

问题描述:

我正在开发一款游戏,并打算为它创建一个jar文件,向我的一些朋友发出beta版本,以便我知道游戏在不同分辨率下的外观以及它如何在更糟和更好的计算机上运行。问题是,当我运行jar文件时,它将是完全黑色的,没有任何事情会发生。为程序创建一个.jar文件

我认为我已经做了错误的图像路径,因为如果我从net beans文件夹中删除所有图像,它看起来就像我启动jar时的样子。我已经完成了图片的路径,只需写下他们的名字,并将它们放在与课程相同的文件夹中。

jar文件看起来像这样: 两个文件夹,META-INF和Apocalypse。里面META-INF是清单文件,它看起来像这样:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.4 
Created-By: 1.7.0_17-b02 (Oracle Corporation) 
Class-Path: 
X-COMMENT: Main-Class will be added automatically by build 
Main-Class: Apocalypse.Main 

里面的启示录文件是所有类和所有的图像,给的一个例子,我如何在代码中,我得到得到的图像他们是这样的ImageIcon ii = new ImageIcon("Image.png")我没有任何路径的图像,但不应该这个代码的工作,如果我有图像在同一个文件夹作为类?除此之外还有什么方法可以实现图像的路径(如果是他们那就是问题)?

+0

我会用谷歌搜索“_add图像罐子档中的”启动接着是您使用的IDE的名称。然后,我会选择你在结果中看到的这个网站上的十几个链接之一...每天都会问这个问题。 – jahroy

你说:

里面的启示录文件是所有类和所有图像

但然后粘贴示例代码:

ImageIcon ii = new ImageIcon("Image.png") 

这尝试从本地计算机上的文件加载。因此它依赖于环境,不适合于广义部署。

这不是你应该做的。您应该将这些图像包含在jar文件中并使用the ImageIcon constructor using a URL as a parameter加载它们。

现在,为了在类路径中获取图像的URL(并且包括jar查找),请参阅Class#getResouce()

典型使用场景:创建你的罐子一个工具类,将做什么,说:

public final class MyImageLoader 
{ 
    // Utility class: no instantiation 
    private MyImageLoader() {} 

    public static ImageIcon getImage(final String resourcePath) 
    { 
     final URL url = MyImageLoader.class.getResource(resourcePath); 
     return new ImageIcon(url); 
    } 
} 

,然后使用:

final ImageIcon i1 = MyImageLoader.getImage("/path/to/image.png"); 
+0

这个工程,但我也有保存文件,因为我使用File类来创建这些保存文件我不能使用一个URL,所以我如何使它在这种情况下工作? –

+0

对于保存文件,您必须采取在System.getProperty(“user.home”)后面保存某处的方法。但是,似乎有一个问题:请参见[这里](http://*.com/questions/1503284/java-system-getpropertyuser-home-returns)。然而,如果您甚至无法确定这一点,我认为仅仅放弃游戏并警告用户“对不起,我无法确定保存文件的位置”是一种理智的做法。 – fge