Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 无法从资源中加载图片_Java_Eclipse - Fatal编程技术网

Java 无法从资源中加载图片

Java 无法从资源中加载图片,java,eclipse,Java,Eclipse,因此,我试图从资源中加载一个图像文件,以便在将应用程序导出到jar文件时可以使用它 现在我已经阅读了这里的文档: 但我还是不明白。。。如何在代码中实现这一点 这里有一张图片,您也可以看到我的应用程序树: 我无法将getImage更改为getResources,因为它需要一些东西,我不知道需要什么 编辑:这是图像行现在的样子:image pic=Toolkit.getDefaultToolkit().getImage(“src/klassid/Pictures/mario.png”) 这将从资源

因此,我试图从资源中加载一个图像文件,以便在将应用程序导出到jar文件时可以使用它

现在我已经阅读了这里的文档:

但我还是不明白。。。如何在代码中实现这一点

这里有一张图片,您也可以看到我的应用程序树:

我无法将getImage更改为getResources,因为它需要一些东西,我不知道需要什么

编辑:这是图像行现在的样子:image pic=
Toolkit.getDefaultToolkit().getImage(“src/klassid/Pictures/mario.png”)

这将从资源中加载它

代码:

包klassid;
导入java.awt.Toolkit;
导入java.awt.Image;
导入java.awt.Graphics;
导入java.net.URL;
公众阶级英雄{
静态主;
java.awt.Image pic=javax.imageio.imageio.read(Hero.class.getClassLoader().getResourceAsStream(“Pictures/mario.png”);
//Image pic=Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource(“klassid/Pictures/mario.png”);
双倍高度=0,速度=4;
公共静态最终双重力=9.81;
双x=25;
int y,a;
布尔左=假,右=假,上=假;
公众英雄(整数x,整数y){
这个.x=x;
这个。y=y;
}
公共空间渲染(图形g,主pohiKlass){
g、 绘图图像(图片,(内部)(x),(内部)(500-(高度*100)),50,50,波希克拉斯);
}
公共无效跳转(){
长前一个=0,开始=0;
while(true){
start=System.nanoTime();
如果(上一个!=0&&up){
双增量=开始-上一个;
高度=(高度+(增量/100000000)*速度);
速度-=(增量/100000000)*重力;
y=(int)(500-(高度*100));
//系统输出打印项次(y);
}  
如果(左)
x-=3;
如果(右)
x+=3;
试一试{
睡眠(10);
}捕捉(中断异常e){
e、 printStackTrace();
}
如果(高度<0){
高度=0;
速度=4;
向上=错误;
}      
先前=开始;
}
}
公共图书馆(国际一){
如果(i==38 | | i==87)
向上=真;
如果(i==37 | | i==65)
左=真;
如果(i==39 | | i==68)
右=真;
}
公共图书馆2(国际一){
如果(i==37 | | i==65)
左=假;
如果(i==39 | | i==68)
右=假;
}
公众假期{
a=y;
}
}

您应该尝试通过将“图片”文件夹直接放入项目文件夹来移动它

您的文件夹布局应该如下所示

-Kodune-mang

       -src
          -klassid

      -Pictures
          -mario.png
您可以使用路径引用“mario.png”图像

Pictures/mario.png
因为java(或至少eclipse)中的文件路径系统将在主项目目录中自动启动。它将能够查看“src”文件夹及其子组件,以及新的“Pictures”文件夹及其子组件。

Toolkit.getImage()有两个方法,您应该使用第二个方法,并使用URL作为参数,使用类加载器获取资源并传递它

  // I am assuming that your picture is in klassid/Pictures folder inside the jar file
  Image pic = Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource("klassid/Pictures/mario.png"));
我喜欢一步一步地做,因此,首先测试类加载器,看看是否可以通过以下方式将图像从工具箱中分离出来:

URL imgUrl = this.getClass().getClassLoader().getResource("klassid/Pictures/mario.png");

只需执行System.out.println(this.getClass().getClassLoader().getResource(“”))即可查看根路径,并按照该路径访问图像/资源。关于getResource(),您应该了解的一点是,它是相对于类路径在运行时获取资源的一种手段。在eclipse中,您可以设置bin或bin/类。在.jar文件中,它是文件结构的顶部。

将其作为资源加载,为什么不呢

java.awt.Image pic = javax.imageio.ImageIO.read(Hero.class.getClassLoader().getResourceAsStream("klassid/Pictures/mario.png"));

带有项目结构的图片是个不错的主意,但是您使用的代码应该以文本的形式发布,而不是图片。无论如何,“我不能将getImage更改为getResources”,我们知道为什么吗?你也试过使用
/klassid/Pictures/mario.png
作为路径吗?我在上次编辑时添加了我的代码。如果我删除/klassid前面的/src,当我在Eclipse中运行程序时,映像将不会加载。我得到了这个错误:''Uncaught error fetching image:java.lang.NullPointerException at sun.awt.image.URLImageSource.getConnection(未知源)at sun.awt.image.URLImageSource.getDecoder(未知源)在sun.awt.image.InputStreamImageSource.doFetch(未知源)在sun.awt.image.ImageFetcher.fetchloop(未知源)在sun.awt.image.ImageFetcher.run(未知源)在sun.awt.image.InputStreamImageSource.doFetch(未知源)在sun.awt.image.ImageFetcher.run(未知源)在sun.awt.image.ImageFetchLoop(未知源)在sun.awt.awt.image.Im。使用此getResource(“Pictures/mario.png”);由于您是从eclipse运行的,getResource()将从bin/classes文件夹加载它作为起点,因此应该有:bin/classes/Pictures/mario.pngStill no luck。给了我大量未知源错误。我尝试了just Pictures版本和bin版本。您可以使用这一行,比如在构造函数内部,来验证根路径:
System.out.println(this.getClass().getClassLoader().getResource(“”)
从该根路径可以找到您的图像,它应该是Pictures/mario.pngIt给我一个:Unhandled exception type ioexception with what error message?代码在我的Eclipse上工作。图像是否在“klassid/Pictures/mario.png”中?我在我的OP中添加了一张新图片。两种方法,底部有红线的方法和注释掉的方法都不起作用。正确,您不能以这种方式实例化图像,因为它在成员变量中引发异常。将它移到构造函数中。我的意思是:公共英雄(intx,inty)抛出异常{this.x=x;this.y=y;java.awt.Image pic=javax.imageio.imageio.read(英雄)。
java.awt.Image pic = javax.imageio.ImageIO.read(Hero.class.getClassLoader().getResourceAsStream("klassid/Pictures/mario.png"));