Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 小程序:加载jar文件中不在主目录中的图像_Java_Html_Jar_Applet - Fatal编程技术网

Java 小程序:加载jar文件中不在主目录中的图像

Java 小程序:加载jar文件中不在主目录中的图像,java,html,jar,applet,Java,Html,Jar,Applet,这个标题听起来可能让人困惑,所以我将解释我的问题。 我正在将我的java应用程序转换为一个小程序,它在Eclipse中以及在我创建带有标记的html文件时工作良好。但是,当我将applet上传到一个html文件并通过它执行时,程序本身加载良好,但它试图从我自己的硬盘而不是JAR文件加载其图像。我怎样才能改变这一点 HTML: 编辑: 我把所有的文件都放在罐子里,这样既快又方便。我获取图像的代码是: img=ImageIO.read(Loader.class.getResourceAsStre

这个标题听起来可能让人困惑,所以我将解释我的问题。 我正在将我的java应用程序转换为一个小程序,它在Eclipse中以及在我创建带有标记的html文件时工作良好。但是,当我将applet上传到一个html文件并通过它执行时,程序本身加载良好,但它试图从我自己的硬盘而不是JAR文件加载其图像。我怎样才能改变这一点

HTML:


编辑:

我把所有的文件都放在罐子里,这样既快又方便。我获取图像的代码是:

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
类的访问,或者它不适用于应用程序资源。我没有更多的时间来做这些废话了