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

java 类 getResource 找不到 jar 文件中列出的图标

梁和颂
2023-03-14

我真的被难住了。我只是一个老的CX11/Motif程序员,试图编写一个小Java程序。在阅读了一周的Oracle Java文档以及与getResource相关的Stack Overflow答案之后,我仍然不知道如何检索jar文件中图标文件的路径。

我的图标包含在应用程序的jar文件中。我希望使用jar文件中的相对位置来访问它们。我假设最好的方法是通过getResource方法。

我的名为F d的程序代码的核心部分(发音为食物——就像漫画中的猫拼写它“获取模糊”)如下:

package localhost.system1;

imports not shown for brevity.

public class Fud extends JPanel
             implements FocusListener, ActionListener, ItemListener
  {
    private static final long   serialVersionUID    = 1L;
    static Food                 data                = null;
    static int                  prev                = 0;
    static int                  next                = 1;
    static int                  plus                = 2;
    static int                  minus               = 3;

    public static void main(String args[]) throws Exception
      {
        LocalDate           now             = LocalDate.now();
        int                 dateDifference  = 0;

        // load in the existing data
        data = new Food(programName);
        data.loadFood(programName);
      
        // test to see if data is up to date. Add days if not
        dateDifference = Math.abs((int)ChronoUnit.DAYS.between(now, data.day[0].date));
    if ( dateDifference != 0)
      {
        data.adjustToToday(dateDifference, programName);
      }

    /////////////////////////////////////////////////  
    // create the GUI and switch running over to it. 
    /////////////////////////////////////////////////
    Fud     fud             = new Fud();
    Class<? extends Fud>    fudClass    = fud.getClass();
    

    String  className = fudClass.getName();
    System.out.println("fudClass getname returns " + className);
    
    URL     testURL         = fudClass.getResource("prev.png");
    System.out.println("fudClass getResource returned " + testURL);
    
    // Create GUI and turn the control over to it
    javax.swing.SwingUtilities.invokeLater
      (new Runnable() 
        {
          public void run() 
            {    
              URL[] iconURL     = new URL[4];
              
              iconURL[prev]     = Fud.class.getResource("prev.png");
              iconURL[next]     = Fud.class.getResource("next.png");
              iconURL[plus]     = Fud.class.getResource("plus.png");
              iconURL[minus]    = Fud.class.getResource("minus.png");

              createAndShowGUI(fud, iconURL);
            }
        }
      );
        
  } // end of main

.
.
.
Rest of methods and subroutines  needed
.
.
.
}

运行时,代码返回以下结果:

fudClass getname returns localhost.system1.Fud
fudClass getResource returned null

这让我很沮丧。无论我尝试什么(我已经尝试了很多事情),结果都是一样的。对于getResource方法的响应,我一直得到NULL。当我用<code>jar-tf-Fud查询jar文件时。jar我得到了以下结果:

jar tf Fud.jar
META-INF/MANIFEST.MF
localhost/
localhost/system1/
localhost/system1/Day.class
localhost/system1/Food.class
localhost/system1/Fud$1.class
localhost/system1/Fud$2.class
localhost/system1/Fud$3.class
localhost/system1/Fud$4.class
localhost/system1/Fud$5.class
localhost/system1/Fud$6.class
localhost/system1/Fud$7.class
localhost/system1/Fud.class
minus.png
next.png
plus.png
prev.png

所以图标在Jar文件中。有人能告诉我我做错了什么吗?在Eclipse中,我的项目浏览器看起来像:Eclipse项目浏览器

我在eclipse中将图像目录添加到我的项目Java构建中,如下所示

我使用Eclipse版本:2021-12(4.22.0)构建ID:20211202-1639构建了该程序。此外,我在Windows 11 Pro构建22000.434上使用Java17.0.1 2021-10-19 LTS。

共有1个答案

马阳曦
2023-03-14

您必须在资源前面添加斜杠:

Fud.class.getResource("/prev.png");

否则,在类所在的同一文件夹中进行java搜索,

因此,它将在< code>localhost/system1中搜索

 类似资料:
  • 我正在尝试将我从eclipse制作的pacman游戏导出到。罐子包装。问题是,尽管eclipse上的一切都运行良好,但当。jar已导出,我使用的资源无法正确加载。我将它们放在一个单独的/res文件夹中,该文件夹位于构建路径上。我通过以下方式访问它们: 我做错了什么?这里是我得到的错误的一个例子(只有在eclipse上导出的. jar中运行良好)

  • 我已经尝试了几种方法(谷歌,堆栈溢出…)和几天解决以下错误没有成功。只有在运行应用程序时才会发生此错误。编译不受影响。 org.databene.commons。配置错误:未找到类:“org.databene.benerator.engine”。DefaultBeneratorFactory'位于org.databene.commons.ExceptionMapper.configurationE

  • 问题内容: 我有这段代码,它从目录中读取所有文件。 效果很好。它使用目录“ text_directory”中所有以“ .txt”结尾的文件填充数组。 如何在 JAR文件中以类似方式读取目录的内容? 因此,我真正想要做的是列出我的JAR文件中的所有图像,这样我就可以加载它们: (之所以有效,是因为“ CompanyLogo”是“硬编码的”,但是JAR文件中的图像数量可以是10到200个可变长度。)

  • 我得到以下例外情况 运行==>>java-jar payara-micro-4.1.2.181.jar[2019-01-15T20:55:37.913-0800][][1;92m[INFO][0m[][1;94mfish.Payara.Micro.boot.Runtime.payaramicroruntimeBuilder[0m][tid:_threadid=1_threadname=main][

  • 问题内容: 第一:我意识到这个问题应该很简单,很多人似乎都经历过。但是,看来我的问题可能与现有职位 略有 不同。 我正在使用NetBeans编译Java应用程序。构建完成后,输出将正确进入dist \文件夹。jar文件存在于此。如果我转到命令行,请导航到该文件夹​​,然后调用以下命令: java -jar Prosperity.jar 一切正常。显然,该应用程序的名称为Prosperity。以下命

  • jar是用“meta-inf”文件夹中的清单文件创建的。清单文件(为了查看目的删除了类路径中的一些jar条目): 文件夹结构: 我正在命令提示符下使用'java-jar application.jar mypkg.main'。 有人能告诉我是什么造成的错误和如何解决它吗?