为程序创建.jar文件

时间:2013-06-03 19:04:18

标签: java file jar path manifest

我正在开发一款游戏,并打算创建一个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

在Apocalypse文件中是所有类和所有图像,举例说明我如何在代码中获取图像我得到它们ImageIcon ii = new ImageIcon("Image.png")我没有任何路径图像,但如果我将图像放在与类相同的文件夹中,则该代码不应该工作吗?如何做到图像的路径(如果它是问题的话)?

1 个答案:

答案 0 :(得分:2)

你说:

  

Apocalypse文件中包含所有类和所有图像

但是您粘贴的示例代码是:

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

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

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

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

典型的使用场景:在你的jar中创建一个实用程序类,例如:

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");