java – 加载.Jar文件或类路径中包含的资源(图像)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 加载.Jar文件或类路径中包含的资源(图像),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3449字,纯文字阅读大概需要5分钟。
内容图文
![java – 加载.Jar文件或类路径中包含的资源(图像)](/upload/InfoBanner/zyjiaocheng/707/ad037753b10c46c19135d1e4851e4507.jpg)
所以我已经尝试过各种各样的解决方法,在堆栈交换上解决这个问题,大多数人说使用getResourceAsStream()方法,我已经完成了.
这是Jar的资源输入方法.
import java.io.InputStream;
public class ResourceLoader {
public static InputStream load(String path){
InputStream input = ResourceLoader.class.getResourceAsStream(path);
if(input == null){
input = ResourceLoader.class.getResourceAsStream("/" + path);
}
return input;
}
}
然后在我的ImageLoader类中使用它.
public class ImageLoader {
public BufferedImage load(String path){
try {
// return ImageIO.read(getClass().getResource(path));
return ImageIO.read(ResourceLoader.load(path));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
并使用将图像加载到主程序中
ImageLoader loader = new ImageLoader();
spriteSheet = loader.load("/spritesheet.png");
现在在日食中游戏运行并加载所有图像完全正常.
但我想要做的是将它导出到Jar,我已经使用了一些教程和
已成功导出包含我使用的图像的资源文件夹.但是,当我尝试运行.jar文件时,此错误会在cmd行中弹出.
Exception in thread "Thread-2" java,lang.IllegalArgumentException: input == null
!
at javax.imageio.ImageIO.read<Image.IO.java:1348>
at gfx.ImageLoader.load<ImageLoader.java:15>
at man.Gaim.init(Game.java:100>
at main.Game.run<Game.java:150>
at java.lang.Thread.run<Thread.java:722>
所以我收集的是图像文件的位置没有被正确读取,或者我以某种方式错误地输入它们,它返回null并且没有任何图像正在加载.运行.Jar时,Panel会出现,但没有任何内容被绘制,并且出现了错误.
这个程序在eclipse中完美运行,没有错误和所有图像加载.
编辑1:
Robermann是getClass().getClassLoader().getResourceAsStream(path))的解决方案.唯一的问题是我需要将图像文件放在带有jar的文件夹中.
比如我有
夹:
— File.Jar
— Images.png
— ImageFolder
——-更多imgaes in imagefolder.png
当它们被定位时,我可以加载所有图像.我的实际问题是,当我导出.Jar时,图像也位于内部,是否可以使用位于.jar内的图像?或者我必须将imga包装在罐子旁边的文件夹中,如上所述,它可以工作,但我更多的是寻找一个可运行的.Jar,我可以转移到托架而不需要它们也需要.jar之外的图像.
解决方法:
关于如何加载类路径资源的问题是反复出现的,对Java新手来说有点混乱:一些答案建议使用class.getClassLoader().getResourceAsStream,其他的是class.getResourceAsStream,尽管它们的语义略有不同:
> class.getResourceAsStream进行路径转换
> class.getClassLoader().getResourceAsStream没有翻译路径
为了更好地显示差异,我将提出以下测试类,它以4种不同的方式尝试加载相同的资源(图像),只有2个工作,具体取决于使用的路径. Jar内容树是:
班级:
package image;
import java.io.InputStream;
public class ImageLoader {
public static void main(String[] args ){
String cmd = null;
InputStream is = null;
final String image = "save.png";
if("test1".equals(args[0])){
cmd = "ImageLoader.class.getClassLoader().getResourceAsStream(\""+image+"\")";
is = ImageLoader.class.getClassLoader().getResourceAsStream(image); //YES, FOUND
}else if("test2".equals(args[0])){
cmd = "ImageLoader.class.getResourceAsStream(\""+image+"\")";
is = ImageLoader.class.getResourceAsStream(image); //NOT FOUND
}else if("test3".equals(args[0])){
cmd = "ImageLoader.class.getResourceAsStream(\"/"+image+"\")";
is = ImageLoader.class.getResourceAsStream("/"+image); //YES, FOUND
}else if("test4".equals(args[0])){
cmd = "ImageLoader.class.getClassLoader().getResourceAsStream(\"/"+image+"\")";
is = ImageLoader.class.getClassLoader().getResourceAsStream("/"+image); //NOT FOUND
}else {
cmd = " ? ";
}
System.out.println("With "+cmd+", stream loaded: "+(is != null));
}
}
运行:
java -cp resLoader.jar image.ImageLoader test4
希望本课程可以帮助理解不同的行为.
内容总结
以上是互联网集市为您收集整理的java – 加载.Jar文件或类路径中包含的资源(图像)全部内容,希望文章能够帮你解决java – 加载.Jar文件或类路径中包含的资源(图像)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。