在部署Java applet时遇到很多麻烦

时间:2009-03-08 17:39:38

标签: java file applet relative-path

我是Java的新手。我只是尝试构建我的applet的.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!

但是,如果我将其粘贴到运行中并按下回车键,那么它给出的网址就会打开:

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

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

完美无缺。但我想把它放在网络服务器上,我不知道如何/我应该怎样做以使所有的图像和声音都有效。有什么想法吗?

...谢谢

3 个答案:

答案 0 :(得分:1)

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

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

当文件不在JAR中时,

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

编辑:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

有两种可行的解决方案:

  • 图片可能出现在applet JAR之外。然后可以使用存在图像的目录的位置初始化applet。获得该信息后,您就可以从服务器加载图像。 The Sun Java tutorial provides an example usage of the applet parameter传递图像源目录。
  • 可以使用applet类加载器使用getResourceAsStream()方法从applet的JAR加载图像。

PS:如果您参考Java tutorials to load icons for your application中的部分,将会很有帮助。同一部分讨论了TofuBeerJohn提出的许多要点。

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