无法从资源加载图片

时间:2014-02-26 15:21:17

标签: java eclipse

enter image description here所以我尝试从资源加载图像文件,这样当我将应用程序导出到jar文件中时,可以使用它。

现在我已经阅读了这里的文档:http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html

但我仍然没有得到它......我怎样才能在我的代码中实现它?

下载图片,以便您也可以看到我的应用程序树: Image

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

编辑:这就是图像线现在的样子:图片pic = Toolkit.getDefaultToolkit().getImage("src/klassid/Pictures/mario.png");

这将从资源中加载它。

CODE:

  package klassid;

import java.awt.Toolkit;
import java.awt.Image;
import java.awt.Graphics;
import java.net.URL;



public class Hero {
    static Main main;
    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"));
    double height = 0, speed = 4;
    public static final double gravity = 9.81;
    double x = 25;
    int y, a;
    boolean left = false, right = false, up = false;

    public Hero(int x, int y){
        this.x = x;
        this.y = y;
    }

    public void render(Graphics g, Main pohiKlass){
        g.drawImage(pic, (int) (x), (int) (500-(height*100)), 50, 50, pohiKlass);
    }

    public void the_jump() {
        long previous = 0, start = 0;

        while(true){
            start = System.nanoTime();  
            if(previous != 0 && up){
                double delta = start - previous;

                height = (height + (delta/1000000000) * speed);        
                speed -= (delta/1000000000)  * gravity;
                y = (int) (500-(height * 100));
                //System.out.println(y);
            }  
            if(left)
                x-= 3;
            if(right)
                x+= 3; 
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(height < 0){
                height = 0;
                speed = 4; 
                up = false;
            }      
            previous = start;
        }
    }
    public void liigu(int i){
        if(i == 38 || i == 87)
            up=true;
        if(i == 37 || i == 65)
            left=true;
        if(i == 39 || i == 68)
            right=true;
    }
    public void liigu2(int i){
        if(i == 37 || i == 65)
            left=false;
        if(i == 39 || i == 68)
            right=false;
    }
    public void getY(){
        a = y;
    }
}

3 个答案:

答案 0 :(得分:1)

您应该尝试将“图片”文件夹直接放入“项目”文件夹中。

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

-Kodune-mang

       -src
          -klassid

      -Pictures
          -mario.png

您可以使用路径引用'mario.png'图像。

Pictures/mario.png

由于java(或至少eclipse)中的文件路径系统将自动在主项目目录中启动。它将能够查看'src'文件夹及其子组件,以及新的'Pictures'文件夹及其子组件。

答案 1 :(得分:1)

Toolkit.getImage()有2个方法,您应该使用第二个方法,将URL作为参数,并使用ClassLoader获取资源并将其传递

  // 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"));

我喜欢一步一步地做事情,所以,首先测试类加载器,看看你是否可以通过以下方式将图像与Toolkit分开:

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

并简单地执行System.out.println(this.getClass()。getClassLoader()。getResource(“”))以查看根路径并将其跟随到您的图像/资源。关于getResource(),您应该了解的一点是,它是在运行时相对于类路径获取资源的意思。在eclipse中你可以设置bin或bin / classes。在.jar文件中,它是文件结构的顶部。

答案 2 :(得分:1)

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

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