如何将图片打包到jar文件中

2023-11-24

我制作了一个 java 应用程序。并将所有类捆绑在 jar 文件中。当我从 netbeans 运行该项目时,我的应用程序运行成功。但当我将 .jar 文件放在另一个位置并从那里运行时,我没有得到我的应用程序使用的图标。在代码中,我从项目文件夹中存在的图像目录中获取图标。

现在,我想知道如何向最终用户呈现这些图像文件(就像我们呈现 .jar 文件一样)。提前致谢


这里似乎有两个问题:

  1. 如何让 NetBeans 在构建项目时生成的 jar 中包含图像文件?

  2. 如何从 jar 访问图像文件?

此答案适用于 NetBeans 6.8 并解决两个子问题。

假设您有一个基于 ant 的 Java 应用程序项目。

这是项目的“文件”视图

JP
+ images
  + test.jpg
+ nbproject
+ src
  + jp
    + Main.java
+ test
+ build.xml
+ manifest.mf

在 Main.java 中,您有如下代码:

public static void main(String[] args) throws IOException {
    // find the file in the file system.. probably not a good idea
    File f = new File("images/test.jpg");
    System.out.println(f.getCanonicalPath()+" "+f.exists());

当您从 NB 内部运行该项目时,您会得到以下输出:

/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true

当您运行打包到 jar 中的代码时,您会得到如下内容:

bash-3.2$ pwd
/export/home/vkraemer/nbhg/web-main
bash-3.2$ java -jar /export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar
/export/home/vkraemer/nbhg/web-main/images/test.txt false

为了在执行 jar 时得到更好的结果,您需要执行以下操作:

添加图像目录作为项目的源根目录.

右键单击该项目并选择“属性”项。将出现一个对话框。

在对话框左侧的列表中选择“来源”。这将更改对话框右侧面板的内容。

按“源包文件夹”表旁边出现的“添加文件夹...”按钮。将出现一个文件选择器。

使用此选择器选择图像文件夹,然后按 OK 按钮。图像文件夹的条目将添加到表中。

使用“项目属性”对话框上的“确定”按钮接受更改并关闭该对话框。

更改您要使用的代码类.getResource().

public static void main(String[] args) throws IOException {
    // find the file in the file system.. probably not a good idea
    File f = new File("images/test.jpg");
    System.out.println(f.getCanonicalPath()+" "+f.exists());
    URL url = Main.class.getResource("/test.jpg");
    System.out.println(url);

当您从 IDE 内部运行项目时,您应该看到如下内容:

/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg true
file:/export/home/vkraemer/NetBeansProjects/JavaApplication2/images/test.jpg

当您运行打包到 jar 中的代码时,您将得到如下内容:

bash-3.2$ pwd
/export/home/vkraemer/nbhg/web-main
bash-3.2$ java -jar /export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar
/export/home/vkraemer/nbhg/web-main/images/test.jpg false
jar:file:/export/home/vkraemer/NetBeansProjects/JavaApplication2/dist/JavaApplication2.jar!/test.jpg

获得 test.jpg 文件的 URL 后,您可以使用图像图标(URL)创建图标

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图片打包到jar文件中 的相关文章

随机推荐

  • 使用 dplyr 更改变量的值

    我经常需要根据不同变量的值更改变量的值 如下所示 mtcars mpg mtcars cyl 4 lt NA 我尝试这样做dplyr但惨败 mtcars gt mutate mpg mpg NA cyl 4 gt as data frame
  • 如何在 POST 表单上设置标题字段?

    如何在提交表单时在 POST 标头中设置自定义字段 这是不可能完成的 据我所知 但是 您可以使用例如 jquery 尽管您可以使用纯 JavaScript 来完成 来序列化表单并发送 使用 AJAX 同时添加自定义标头 看看jqueryse
  • 仅当某个元素旁边存在某个元素时,才将样式应用于元素

    我正在使用 section 标签在几页上 但在一页上我使用 section
  • Magento Apache 配置(app/etc/local.xml 可访问警告)

    刚刚在 Linux 服务器上安装完 Magento 当我进入 Magento 管理面板 时 我可以在 页面顶部 您的网络服务器配置不正确 因此 可以从外部访问包含敏感信息的配置文件 请联系您的托管提供商 出现此错误消息的最可能原因是什么 T
  • 如何让 TypeScript 引擎允许在 JSX 中自定义 HTML 属性?

    我猜想其中的 TypeScript 引擎视觉工作室代码已收到更新 现在第一次抱怨我在 HTML 元素上预先存在的自定义道具无效 这是一个 Babel React JSX 项目 没有任何 TypeScript div div 注意 它们 技术
  • 在 Android 中检测 VPN 背后

    如何以编程方式检测流量是否通过 VPN 而不使用意图连接到 VPN 服务 有系统调用吗 这有效 private boolean checkVPN ConnectivityManager cm ConnectivityManager this
  • 像硬币一样旋转图像

    我有一张图片 我想要像硬币一样旋转它在表面上旋转 我尝试了旋转变换 但它不会那样旋转 如何实现这样的动画呢 code void viewDidLoad super viewDidLoad self view setUserInteracti
  • 使用 Spring Boot 禁用单元测试的安全性

    我正在尝试创建一个简单且安全的 Spring Boot Web 项目 我可以正常启动应用程序 并且安全性工作正常 但是 我有一些组件想要在没有安全性的情况下进行测试 或者根本不进行测试 我根本无法让测试工作 我收到一个异常 表明它找不到 O
  • 使用 javascript 从 Firefox 获取原始源代码

    我正在编写一个程序来验证远程服务器上的网页 它使用 selenium RC 来运行 Firefox 并进行一系列测试 因此我可以调用任意 javascript 当出现故障时 我想记录页面生成的 HTML 现在访问 DOM HTML 很容易
  • moment.js - UTC 无法按我的预期工作

    在节点控制台中测试 var moment require moment create a new Date Object var now new Date 2013 02 28 11 11 11 create the native time
  • 对 SDL_Init 的未定义引用

    我今天开始使用 SDL 之前遇到了一些问题 现在我可以运行它 但它不允许我初始化它 这是我的代码 include
  • 使用ffmpeg改变帧率

    我正在尝试将视频剪辑 MP4 yuv420p 从 30 fps 转换为 24 fps 帧数是正确的 因此我的输出应该从 30 fps 的 20 分钟更改为 24 fps 的 25 分钟 其他一切都应该保持不变 尽可能尝试使用 ffmpeg
  • 致命错误:找不到类“Dotenv\Dotenv”

    大家好 我很困惑 我不知道我做错了什么 这告诉我致命错误 找不到类 Dotenv Dotenv 但我不明白为什么 dotenv new Dotenv Dotenv dirname dirname dirname dirname DIR do
  • UIViewController - 加载速度异常缓慢

    我正在编写一个基于选项卡的通用应用程序 其中一个选项卡的加载时间比其他选项卡要长得多 大约 5 秒 并且在执行此操作时它会锁定主线程 现在 这个特定选项卡是一个图像库 因此预计需要一些时间来加载和显示图像 但是 会出现延迟before我实例
  • SQL 标准 UPSERT 调用

    我正在寻找一个标准的 SQL UPSERT 语句 如果存在 则一次调用插入和更新 我正在寻找一个有效 高效且跨平台的调用 我见过MERGE UPSERT REPLACE INSERT ON DUPLICATE UPDATE但没有任何声明能够
  • 序列化或内爆

    我需要在数据库中存储大量二维数组 但不知道该使用什么 serialize or implode 所以我做了一些测试 找出哪一个运行得更快 并得出结论 serialize Execution times 1 000 000 Serialize
  • 所有者无法推送到组织存储库

    今天 我已将我的私人 github 存储库移至新创建的组织 我是该组织的所有者 我已将远程来源更改为 电子邮件受保护 组织 repo git 我无法推送到远程 因为我收到错误消息 错误 MyGithubUsername 对organizat
  • 两个日期之间的天数 C++

    我看到了 C Java 的示例 但对于 C 我找不到计算两个日期之间有多少天的解决方案 例如2012年1月24日至2013年1月8日 Thanks 这是一种方法 include
  • 使用jquery将外部html文件加载到div

    我正在使用一个有很多工具提示的 html 页面 每个工具提示都有一个画廊 因为不可能使用具有相同 id 的多个画廊 我计划为画廊创建 6 个不同的 html 文件 然后将画廊加载到我的默认页面中 我需要为每个 div 计算 html 页面
  • 如何将图片打包到jar文件中

    我制作了一个 java 应用程序 并将所有类捆绑在 jar 文件中 当我从 netbeans 运行该项目时 我的应用程序运行成功 但当我将 jar 文件放在另一个位置并从那里运行时 我没有得到我的应用程序使用的图标 在代码中 我从项目文件夹