我是新来的Java。我只是试图建立一个.罐子文件的我的小程序所以我可以从我的浏览器。这就是我的目录的结构看起来像:

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

动我的'财产'的文件夹的'bin文件夹没有修复这一点。它试图装载:

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

他说:

Can't read input file!

但是url它给打开了好的,如果我粘贴到运行和打输入:

因此,为了避免自己很多头痛我的注释说明的代码在我的ImgHelper类并没有这样的:

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

这完美的作品。但是我想把这个放在一个网络服务器,并且我不知道什么我应该做到使所有的图像和声音的工作。任何想法?

谢谢...

有帮助吗?

解决方案

为什么不将它全部放在JAR文件中然后调用Class.getResourceAsStream?

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

当文件不在JAR中时,

getResourceAsStream将起作用,它们需要相对于类文件。

编辑:

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

其他提示

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

 my_gif = getImage(getDocumentBase(),"imageExample.gif");

有两种可能的解决方案,将工作:

  • 图像可能是本外程序的罐子。小程序然后可以初始位置的目录像。一旦你有了这些信息,你可以随后加载的图像服务器。 太阳Java的教程提供了一个实例的使用程序参数 通过图像来源目录。
  • 小程序类装载可能被利用来装载图像小程序的罐子,使用getResourceAsStream()方法。

PS:这将是有益的,如果你提到的部分 Java教程载的图标为你的申请.同一节讨论一个很大的点带来的 TofuBeer约翰.

编辑:使用的文件API不是建议,因为它结束了读的当地文件系统。这是不能接受的对于大多数用户在互联网上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top