Java 小程序:加载jar文件中不在主目录中的图像
这个标题听起来可能让人困惑,所以我将解释我的问题。 我正在将我的java应用程序转换为一个小程序,它在Eclipse中以及在我创建带有标记的html文件时工作良好。但是,当我将applet上传到一个html文件并通过它执行时,程序本身加载良好,但它试图从我自己的硬盘而不是JAR文件加载其图像。我怎样才能改变这一点 HTML:Java 小程序:加载jar文件中不在主目录中的图像,java,html,jar,applet,Java,Html,Jar,Applet,这个标题听起来可能让人困惑,所以我将解释我的问题。 我正在将我的java应用程序转换为一个小程序,它在Eclipse中以及在我创建带有标记的html文件时工作良好。但是,当我将applet上传到一个html文件并通过它执行时,程序本身加载良好,但它试图从我自己的硬盘而不是JAR文件加载其图像。我怎样才能改变这一点 HTML: 编辑: 我把所有的文件都放在罐子里,这样既快又方便。我获取图像的代码是: img=ImageIO.read(Loader.class.getResourceAsStre
编辑:
我把所有的文件都放在罐子里,这样既快又方便。我获取图像的代码是:
img=ImageIO.read(Loader.class.getResourceAsStream(“/res/object/ball.bmp”)代码>
这在我的IDE中有效,但在联机使用中不起作用您可以提供您的代码来告诉我们如何获取图像,但我认为它没有捆绑在jar中。一种方法是将jar放入您的包中,并按如下方式获取:
project
-src
-resources
-<yourImage>
类别:getResourceAsStream(“foo”)
)
然而,这是一种噱头。首选的方法是将图像放入项目中源代码之外的目录中,比如图像或资源,然后将其捆绑到applet的jar中。使用您最喜欢的构建工具(ant、maven、ivy)将图像包含在jar中。目录结构可以如下所示:
project
-src
-resources
-<yourImage>
这就是获得图像的方法,因为它保证位于类路径中
基本上,如果您有这样的包结构:
project
-src
-resources
-<yourImage>
src项目
com.foo.bar
com.foo.bar.stuff
com.foo.bar.resources
-你的形象
-其他东西
-ResourceGetter.java
您可以在ResourceGetter中执行以下操作
Class.getResourceAsStream(“yourImage”)代码>
这将为您的图像提供一个句柄,您可以像平常一样加载它。“为了速度和方便起见,我的所有文件都放在罐子里”不会与“尝试从我自己的硬盘加载其图像”联系在一起getResource
仅当HD位于小程序的运行时类路径上时才会查看硬盘。由于小程序的运行时类路径是tea.jar
,它应该在那里查看。我从html文件运行小程序,因此我认为它的类路径与html文件位于同一文件夹中。但我在html文件中添加了一个存档标记。“我认为它的类路径与html文件在同一个文件夹中。”不是用那个html,但我已经提到了这一点。HTML的URL是什么?img=ImageIO.read(Loader.class.getResourceAsStream(“/res/object/ball.bmp”);如果您将其更改为Loader.class.getResourceAsStream(“ball.bmp”);并将ball.bmp与Loader class.BTW放在同一个包中-请在使用Java 7 SDK编译代码时使用!如果小程序编译为1.6或更低版本,我可以在本地测试它:(“使用相对路径的文件”文件
和小程序
不要混合,除非从最终用户的本地文件系统加载某些内容&小程序已签名并受信任。然后,相对路径没有意义。如果小程序提取文件,则文件和小程序会混合,因为文件位于本地文件系统。此外,他可能会尝试从predef加载它在internet上的一个位置。顺便问一下,你所说的“不要混合,除非…”和“那么,一个相对路径是没有意义的”是什么意思?听起来你好像很困惑。JRE提取类,小程序没有这样的功能。“另外,他可能会尝试从internet上的一个预定义位置加载它。”小程序中的文件
对象都不会指向internet上的任何资源。“听起来你很困惑。”您开发了多少个小程序?Jnlp长期以来一直是开发小程序的标准。Jnlp描述符是将任何Java应用程序部署到客户端的一种简单而结构化的方法。使用Java Web Start,可以轻松定义资源,小程序将自动为客户端下载到开发人员选择的目录中。声音对我来说,你不熟悉部署小程序的标准。看看这一课:你认为这与JNLP有什么关系?!?(是的,我完全知道插件2 JRE中的小程序可以使用JWS进行嵌入式部署,正如我在&.1的信息页面中提到的),但JWS并没有部署这个小程序(从applet元素中可以明显看出这一点。)2)JWS部署不会改变对java.io.File
类的访问,或者它不适用于应用程序资源。我没有更多的时间来做这些废话了