有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文件在部署java小程序时遇到很多问题

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

将我的“资产”文件夹移动到“bin”文件夹也无法解决此问题。它尝试加载:

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

说:

Can't read input file!

但如果我将其粘贴到run并按enter键,它提供的url将很好地打开:

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

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

这很好用。但是我想把它放在一个网络服务器上,我不知道该怎么做才能让所有的图像和声音都正常工作。有什么想法吗

谢谢


共 (3) 个答案

  1. # 1 楼答案

    为什么不把它全部放在一个JAR文件中,然后调用这个类呢。获取资源流

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

    getResourceAsStream将在文件不在JAR中时工作,它们需要与类文件相关

    编辑:

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

  2. # 2 楼答案

    有两种可行的解决方案:

    • 图像可能出现在applet JAR外部。然后可以使用图像所在目录的位置初始化小程序。一旦你有了这些信息,你就可以从服务器上加载图像了The Sun Java tutorial provides an example usage of the applet parameter以传递图像源目录
    • 小程序类加载器可用于使用getResourceAsStream()方法从小程序的JAR加载图像

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

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

  3. # 3 楼答案

    我同意ToBubeer关于JAR的观点,但是如果您想将图像放到服务器上,请参阅关于Applet图像的教程here。代码库将是您的小程序在服务器上的任何位置,您也可以在服务器上放置与此相关的图像。将媒体跟踪器与小程序一起使用。方法来检索url。从示例中可以看出:

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