我是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\\";
}
完美无缺。但我想把它放在网络服务器上,我不知道如何/我应该怎样做以使所有的图像和声音都有效。有什么想法吗?
...谢谢
答案 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)
有两种可行的解决方案:
PS:如果您参考Java tutorials to load icons for your application中的部分,将会很有帮助。同一部分讨论了TofuBeer和John提出的许多要点。
编辑:不建议使用File API,因为它最终会读取本地文件系统。这对于互联网上的大多数用户来说都是不可接受的。