java - 什么代码能够读取program.jar应用程序文件中包含的图像;从任何地方?

标签 java image load relative-path executable-jar

image 的类型为 BufferedImage

public void loadImage(String fileImage) {

    URL imageurl = getClass().getResource(fileImage);

    File input = null;

    try {
        input = new File(imageurl.toURI());
        image = ImageIO.read(imageurl);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Unknown error has occurred!", "Unknown error", JOptionPane.ERROR_MESSAGE);
    }
}

这是我在程序中调用它的方式:

loadImage("./Images/Cover.png");

图像文件恰好位于:
C:\Users\S\Google Drive\NetBeansProjects\DictionaryShorten\src\dic\Images

DictionaryShorten.java 文件位于:
C:\Users\S\Google Drive\NetBeansProjects\DictionaryShorten\src\dic

单击选项“清理并构建”后,images文件夹将包含在DictionaryShorten.jar中;这意味着图像成为 jar 文件的一部分。

该程序在 NetBeanse IDE 中运行正常,但当我从 DictionaryShorten.jar 文件运行它时,它抛出异常!!!

如何修改loadImage(String)以使DictionaryShorten.jar文件可以在任何地方运行?

最佳答案

Class.getResource 的参数不是文件名。它是一个相对 URL,相对于每个类路径条目(例如 .jar 文件)的根。

从字符串参数中删除句点 (.)。

此外,.jar 文件中的条目不是实际文件,因此 new File(imageurl.toURI()) 始终会失败。您应该删除该行代码。 (看来您无论如何都不需要它。)

应该注意的是,异常非常有值(value)。它们会告诉您出了什么问题以及出问题的位置。您会发现,如果在对话框中显示异常,问题就更容易解决:

JOptionPane.showMessageDialog(null, "Unknown error has occurred:\n\n" + e,
    "Unknown error", JOptionPane.ERROR_MESSAGE);

比这更好的是显示完整的堆栈跟踪:

StringWriter stackTrace = new StringWriter();
e.printStackTrace(new PrintWriter(stackTrace));
JTextArea stackTraceField = new JTextArea(stackTrace.toString(), 12, 40);
stackTraceField.setEditable(false);

JOptionPane.showMessageDialog(null,
    new Object[] {
        "Unknown error has occurred.", new JScrollPane(stackTraceField)
    },
    "Unknown error", JOptionPane.ERROR_MESSAGE);

堆栈跟踪准确地告诉您哪一行代码导致了异常。

关于java - 什么代码能够读取program.jar应用程序文件中包含的图像;从任何地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35068323/

相关文章:

java - 将 Java 项目转换为 Eclipse 插件?

java - 使用 Scanner 时添加 null 值

jquery - 使用 jQuery 在图像上画点

javascript - 使用 $.ajax 的问题

javascript - 将网站的一部分加载到 iframe 中

Java:计算空格和制表符

php - 如何从 base64 编码的 jpeg 创建 GD 图像?

javascript - 必应图像搜索 API

pandas - UnicodeDecodeError : 'utf-8' codec can't decode byte 0xcc in position 3: invalid continuation byte

java - Spring 启动 : Unable to configure