【问题标题】:Add image to JAR Java将图像添加到 JAR Java
【发布时间】:2010-11-08 22:40:38
【问题描述】:

我在JFrame 中使用了一些图像,我已经给出了将图像加载到框架面板中的路径,但是当我制作应用程序的 jar 时它不显示图像。
我应该把图片放在哪里?
我应该如何指定路径?

setIconImage(Toolkit.getDefaultToolkit().getImage(
                "D:\\RFT\\src\\dailogBox\\dump.jpg"));

我已经这样做了。

【问题讨论】:

    标签: java resources jar core


    【解决方案1】:

    第一步:将您的图像放在 JAR 文件中定义的位置。如果你把它放到 src 文件夹中,也许你的 IDE 或者你的构建工具会自动将它打包到 JAR 中。否则,请检查您的 IDE/构建工具的文档,您必须将它放在哪个位置。

    第二步:从您的程序中访问该文件。我假设你把它放在包(JAR 中的路径)package1/package2 中,文件名为 dump.jpg。在这种情况下,您调用:

    setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg")));
    

    getClass().getResource(...) 返回类路径上资源的 URL。您在类路径中的路径以“/”开头,并使用资源的完整路径/包,以“/”分隔。

    【讨论】:

    • @KareemMesbah,您只需将其引用为 MyClass.class.getResource("/path/to/file.jpg")
    【解决方案2】:

    这是处理 JAR 应用程序中所有图像和图标的最佳方式。

    将所有图像和图标压缩到自己的 JAR 文件后 - 通过将图像 JAR 文件添加到库选项卡中来配置构建路径,以便它现在包含在类路径中。

    然后只需在您的构造函数开头使用以下 3x 行代码 即可访问您需要的任何图像,包括不接受简单 I​​mageIcon 作为其主图标的 SystemTray 图像(我知道很奇怪)。 3x 行是:

      URL iconUrl = this.getClass().getResource("/image-iconb.png");
      Toolkit tk = this.getToolkit();
      someimgicon = tk.getImage(iconUrl);
    

    (someimgicon 只是一个构造函数声明的 Image 变量) 现在您可以简单地设置窗口图标:

    setIconImage(someimgicon);
    

    在设置系统托盘图标时同时使用相同的变量,声明:

     trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);
    

    以上内容允许您轻松集中地声明图像或图像图标,而不会冒没有将图像资源保存在正确位置的风险。它保持整洁,JAR 包含在运行时自动编译的所有图像和程序的分发。

    作为奖励,一旦 JAR 在您的类路径中注册 - 您可以随时将任何其他图像添加到同一个 JAR 中而无需大惊小怪 - 一切正常,添加的图像立即可用于您的应用。

    在我看来好多了。

    【讨论】:

    • 我们应该把我们所有的图像和图标压缩到它自己的JAR文件中,然后让我们的IDE制作另一个封装原始JAR文件的JAR文件?什么?!为什么
    【解决方案3】:

    首先在 Source Packages 下创建一个包(比如图片)

    将你所有的图片复制到这个包中(当你创建一个包时,你的项目src文件夹中会创建一个以你的包名命名的文件夹,所以将图片复制到它)

    你可以从你的程序中访问你的图片

    示例 1:

            this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/yourimagename")));
    

    示例 2:

            URL imageurl = getClass().getResource("/images/imagename");//assuming your package name is images 
            Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl);
            JLabel piclabel = new JLabel(new ImageIcon( myPicture ));
            piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null));
    

    现在使用这个 JLabel piclabel

    【讨论】:

      【解决方案4】:

      有很多方法,例如在您的 jar 文件中创建一个名为 resources 的文件夹,并使用相对路径从那里引用您的图像....

      【讨论】:

      • 我已经在源文件夹中粘贴了图片,如何设置相对路径?
      【解决方案5】:

      在 netbeans 8.1 中,我所做的是在项目文件的 src 文件夹中包含名为 Resources 的图标和其他图像文件夹。因此,每当我构建 Jar 文件时,该文件夹都会包含在那里。文件树应该是这样的:

      • src(源包中的Java文件在这里)
      • ** 您在项目中指定的包**

        • file.java
      • 资源

        • 图片.jpg

      代码应该是这样的:

      jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
      

      【讨论】:

        【解决方案6】:

        将图像作为资源添加到您的 jar 中,然后(假设 jar 在您的类路径中)使用类加载器到 load it as a stream

        【讨论】:

        • 你能给我举个例子吗?
        • getClass().getResourceAsStream("/icons/closed_folder_small.png");
        【解决方案7】:

        执行此操作的简单方法是让您的图像文件夹与 jar 文件并行。示例:

        在代码中说你像这样调用图像:

        pic = new ImageIcon("Pics/buttonpic.jpg");
        

        这意味着您的图片将被称为 buttonpic 并且位于项目目录中名为 Pics 的文件夹中。现在,在您制作 jar 文件后,将该 Pics 文件夹复制到您的 jar 文件所在的同一文件夹中。

        示例:如果您的 jar 文件位于桌面上,则将 Pics 文件夹放在桌面上。现在,当您运行 jar 文件时,您的图片将正常工作。现在为了掩盖您需要将 Pics 文件夹放在 jar 文件旁边的事实,您可以创建一个新文件夹并将您的 jar 和 Pics 文件夹放在该文件夹中。然后右键单击 jar 并创建一个快捷方式,然后将该快捷方式放在桌面上或您想要仅包含 jar 文件的位置,并将您创建的新文件夹放置在您想要隐藏它的任何位置。

        【讨论】:

        • 我认为你得到了那些反对票,因为首选的方法是将所有资产与应用程序一起存储在 JAR 存档中。这样,您只需分发一个文件。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 2015-05-19
        • 2016-06-26
        • 2014-02-09
        相关资源
        最近更新 更多