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

部署java小程序时遇到很多问题,java,file,applet,relative-path,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/ 但

我是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")));
将我的“资产”文件夹移动到“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\\";
}
这很好用。但是我想把它放在一个网络服务器上,我不知道该怎么做才能让所有的图像和声音都正常工作。有什么想法吗


谢谢…

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

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

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

编辑:


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

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

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

有两种可行的解决方案:

  • 图像可能出现在applet JAR外部。然后可以使用图像所在目录的位置初始化小程序。一旦你有了这些信息,你就可以从服务器上加载图像了。以传递图像源目录
  • 小程序类加载器可用于使用getResourceAsStream()方法从小程序的JAR加载图像
附言:如果您能参考本手册中的章节,那将很有帮助。同一节讨论了和提出的许多观点


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

那么你让游戏正常运行了吗?