文件在部署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\\";
}
这很好用。但是我想把它放在一个网络服务器上,我不知道该怎么做才能让所有的图像和声音都正常工作。有什么想法吗
谢谢
# 1 楼答案
为什么不把它全部放在一个JAR文件中,然后调用这个类呢。获取资源流
JAR文件更好,因为它是单个HTTP连接,而不是每个文件一个HTTP连接。使用流也比使用文件灵活得多
getResourceAsStream将在文件不在JAR中时工作,它们需要与类文件相关
编辑:
另外,如果applet位于服务器上,File方法将不起作用,因为它将尝试从本地计算机(我想,我还没有尝试过)而不是从服务器打开文件。即使它试图创建一个无法工作的服务器文件路径
# 2 楼答案
有两种可行的解决方案:
PS:如果您参考Java tutorials to load icons for your application中的部分,那将很有帮助。同一节讨论了TofuBeer和John提出的许多观点
编辑:不建议使用文件API,因为它最终会读取本地文件系统。这对于互联网上的大多数用户来说是不可接受的
# 3 楼答案
我同意ToBubeer关于JAR的观点,但是如果您想将图像放到服务器上,请参阅关于Applet图像的教程here。代码库将是您的小程序在服务器上的任何位置,您也可以在服务器上放置与此相关的图像。将媒体跟踪器与小程序一起使用。方法来检索url。从示例中可以看出: