0

我是 Java 新手。我只是想为我的小程序构建一个 .jar 文件,以便可以从浏览器运行它。这是我的目录结构的样子:

C:\java\pacman\src

包含所有 .java 类文件。

C:\java\pacman\assets

包含大约 4-5 个图像和音频文件。

如果我尝试使用以下代码:

Image someFile=getCodeBase().toString() + "file.png";

结果getCodeBase()

file:/C:/java/pacman/bin/

但是以下代码无法加载:

   img=new ImgHelper(getCodeBase().toString() + "assets/");
   ImageIO.read(new File(img.getPath("pacman.png")));

将我的“assets”文件夹移动到“bin”文件夹也没有解决这个问题。它尝试加载:

file:/C:/java/pacman/bin/assets/pacman.png

说:

Can't read input file!

但是,如果我将其粘贴到运行中并按 Enter 键,它提供的 url 可以正常打开:

所以为了避免让自己很头疼,我在我的 ImgHelper 类中注释掉了代码并这样做了:

public ImgHelper(String dir)
{
    //this.imgDir=dir;
    imgDir="C:\\java\\pacman\\assets\\";
}

效果很好。但是我想把它放在一个网络服务器上,我不知道我应该如何/做什么来使所有的图像和声音都能正常工作。有任何想法吗?

谢谢...

4

3 回答 3

1

为什么不把它全部放在一个 JAR 文件中,然后调用 Class.getResourceAsStream 呢?

JAR 文件更好,因为它是单个 HTTP 连接,而不是每个文件一个 HTTP 连接。使用 Stream 也比使用 File 灵活得多。

当文件不在 JAR 中时,getResourceAsStream 也可以工作,它们需要与类文件相关。

编辑:

另一件事,如果小程序在服务器上,则 File 方法将不起作用,因为它将尝试从本地计算机(我想,我没有尝试过)而不是从服务器打开文件。即使它试图创建一个到服务器的文件路径也不起作用。

于 2009-03-08T17:51:56.413 回答
0

我同意 tofubeer 关于 JAR 的看法,但是如果您想将图像放在服务器上,请参阅此处的 Applet 图像教程。代码库将是您的小程序在服务器上的任何位置,您也可以将相对于服务器上的图像放置。使用媒体跟踪器和 Applet.getImage() 方法来检索 url。从例子:

 my_gif = getImage(getDocumentBase(),"imageExample.gif");
于 2009-03-08T18:00:55.817 回答
0

有两种可行的解决方案:

  • 图像可能存在于小程序 JAR 之外。然后可以使用图像所在目录的位置来初始化小程序。一旦你有了这些信息,你就可以从服务器加载图像。Sun Java 教程提供了一个使用applet 参数来传递图像源目录的示例。
  • 小程序类加载器可用于从小程序的 JAR 加载图像,使用 getResourceAsStream() 方法。

PS:如果您参考Java 教程中的部分来为您的应用程序加载图标,将会很有帮助。同一部分讨论了TofuBeerJohn提出的许多观点。

编辑:不推荐使用 File API,因为它最终会读取本地文件系统。这对于互联网上的大多数用户来说是不可接受的。

于 2009-03-08T18:06:49.547 回答