当前位置: 首页 > 知识库问答 >
问题:

无法从资源加载图片

赵雪峰
2023-03-14

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

但是我仍然不明白...我如何在我的代码中实现它?

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

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

这将从资源中加载它。

代码:

  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个答案

寿阳华
2023-03-14

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

java.awt.Image pic = javax.imageio.ImageIO.read(Hero.class.getClassLoader().getResourceAsStream("klassid/Pictures/mario.png"));
翟丰茂
2023-03-14

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

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

-Kodune-mang

       -src
          -klassid

      -Pictures
          -mario.png

你可以参考“马里奥”。使用路径创建png图像。

Pictures/mario.png

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

鲁泰宁
2023-03-14

工具包。getImage()有2个方法,您应该使用第二个方法和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"));

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

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

然后简单地做这个系统。出来println(this.getClass()。getClassLoader()。getResource(“”)以查看根路径,并按照该路径访问图像/资源。关于getResource(),您应该了解的一点是,它是在运行时相对于类路径获取资源的一种手段。在eclipse中,您可以设置bin或bin/class。而在。jar文件它是文件结构的顶部。

 类似资料:
  • 我对javafx非常陌生,而且已经学会了使用代码教程进行测试时: 异常是由第行

  • 我读过https://flutter.dev/docs/development/ui/assets-and-images#asset-包依赖项中的图像和从资产中读取的文本文件,并应用了所有这些,但我的代码仍然无法工作。。。。 我为此打开了一个新项目,在主文件夹中创建了资产和文件: 然后,不信任Android Studio,我检查了vi,在pubspec.yaml一切都好: 该文件以以下内容结尾:

  • 这是我的应用程序的文件夹结构 在我的文件,我像这样加载字体和资源 对于这个,运行将给出退出代码0。 在我家。dart我有以下课程: 我在其他地方使用,以显示图像(代码省略): 这座大楼没有错误。颤振博士-v没有给出任何错误,颤振分析-v也没有给出任何错误。apk似乎构建得很好,但当应用程序在我的手机上打开时,我在asset_bundle中发现以下错误。投掷: 发生异常。错误(无法加载资源:imag

  • 我有一个Laravel应用程序,在我的public/js文件夹中有一些javascript文件。在127.0运行我的应用程序时。0.1:8000/Laravel无法打开JS文件。错误404: 我认为这可能与身份验证有关,所以我已经在public/js文件夹上执行了chmod 777。但那没用。 我把它们输入如下:

  • 我想在不同的子目录中保存不同的css和js文件,这是我的目录结构 然后我尝试将所有这些文件导入到我的索引中。html文件(由“/”映射),但没有正确导入。我应该配置什么使Spring boot能够在“资源”下的所有子目录中递归搜索资源?另外,如果我还想将所有html模板放在子目录中,该怎么办?

  • 问题内容: 浏览服务器的IP地址时,我有一个jar可以很好地加载java web start。一旦尝试使用服务器 名称, 我将收到以下异常: 包装的异常: JNLP: 知道我应该找什么吗? 问题答案: 我已经将Java代理设置更改为直接连接-并且它可以工作。