在Jar文件中,路径是路径,不是实际的目录,就像你在文件系统上使用它们一样。要获取Jar文件特定路径下的所有资源:
- 获得指向该Jar文件的
URL
。
- 从
URL
获取InputStream
。
- 从
InputStream
构造ZipInputStream
。
- 迭代每个
ZipEntry
,查找与所需路径匹配的条目。
..如果我的Applet不在那个jar中,我还能测试吗?或者我必须编写两种方法来获取我的图片?
ZipInputStream
无法处理文件系统上目录中的松散资源。但是,我强烈建议使用构建工具(如Ant)来构建(编译/打包/签名等)Applet。编写构建脚本并进行检查可能需要一个小时左右,但之后您只需按下几个键并等待几秒钟即可构建项目。
如果我想测试我的Aplet,每次都必须提取和签署我的jar文件会很麻烦
我不确定你的意思。‘提取’是从哪里开始的?如果我没有表达清楚,一个沙盒应用程序可以通过在
archive
属性中提到的任何JAR文件加载资源。另一件事情,你可以做的是将资源JAR与应用程序JAR分开。资源通常比代码更少更改,因此您的构建可能能够采取一些捷径。
我认为我真的需要考虑将我的图像放入jar之外的单独目录中。
如果你指的是服务器上,除了向服务器寻求帮助,没有实际的方法来获取图像文件列表。例如,某些服务器被不安全地设置为为任何没有默认文件(如index.html)的目录生成基于HTML的“文件列表”。
我只有一个jar文件,其中包含我的类、图片和声音。
好的-考虑将声音和图像移到单独的Jar中。或者至少将它们放在没有压缩的Jar中。虽然Zip压缩技术对类很有效,但对于(已经压缩的)媒体格式来说,它们的压缩效率较低。
我必须签署它,因为我使用“Preferences”类保存用户设置。
对于小程序,可以使用cookie等替代“Preferences”。对于插件2架构小程序,可以使用
Java Web Start启动嵌入在浏览器中的小程序。JWS提供了PersistenceService。这是我小小的
PersistenceService演示。
说到JWS,这就引出了一个问题:你是否绝对确定这个游戏作为小程序而不是应用程序(例如使用
JFrame
)通过JWS启动会更好呢?
小程序会给你带来无尽的压力,自从Java 1.2引入以来,JWS一直提供了PersistenceService
。
getClass().getClassLoader().getResource("/some/path/to/ResourceInJar.txt");
将获取到 Jar 包中资源的 URL。可以从第一个 URL 中获取 Jar 的 URL(检查第一个 URL 的输出)。但是..Blah.class.getResourceAsStream(path)
..你认为我有水晶球吗?!? 我甚至不知道path
的值。发布一个新问题,包括 [mcve] 以及资源路径的描述。 - Andrew Thompson