当前位置: 首页 > 面试题库 >

访问罐子中的图像

郑功
2023-03-14
问题内容

第一。我知道关于如何访问jar文件中的图像已经存在各种主题。第二。我尝试了很多选择,但没有一个没有用。我当然知道在某个地方我犯了一个错误。您能帮助我了解我在做什么错吗?

因此,我有一个名为“ j”的原型项目,它仅包含一个Java类-
客户端。客户端尝试访问图像good.png。将所有文件打包到可执行jar文件后,客户端将无法访问文件。我在月食中工作,并使用蚂蚁。

j/
-src/
--com/
---pupcom/
----Client.java
-images/
--good.png
-build.xml
-.classpath
-.project

com.pupcom.Client包含

package com.pupcom;
//imports;
public class Client {
    public static void main(String [] a) {
        new Client();
    }
    public Client() {
        URL imageURL =  getClass().getClassLoader().getResource("images"+File.separator+"good.png");
        if(imageURL != null){
            Image image = Toolkit.getDefaultToolkit().getImage(imageURL);
            if(image != null){
                System.out.println("Complete!");
            }else{
                System.out.println("image == null");
            }
        }else{
            System.out.println("imageURL == null");
        }
    }
}

build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="j" basedir=".">
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>
    <property name="main-class" value="com.pupcom.Client"/>
    <property name="jar.name" value="j.jar"/>
    <target name="clean">
        <delete dir="${build.dir}"/>
        <delete file="${jar.name}"/>
    </target>
    <target name="compile" depends="clean">
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.dir}/images"/>
        <copy todir="${build.dir}/images">
            <fileset dir="images" />
        </copy>
        <javac srcdir="${src.dir}" destdir="${build.dir}" />
    </target>
    <target name="run" depends="jar">
            <java  jar="${jar.name}" fork="true"/>
        </target>
    <target name="jar" depends="compile">
        <jar destfile="${jar.name}">
            <fileset dir="${build.dir}" />
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>
</project>

我还使用了以下几行:

URL imageURL =  getClass().getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG");
URL imageURL =  getClass().getClassLoader().getResource("good.PNG");
URL imageURL =  getClass().getResource(File.separator + "images"+File.separator+"good.PNG");
URL imageURL =  getClass().getResource("good.PNG");
URL imageURL =  Client.class.getResource(File.separator + "images"+File.separator+"good.PNG");
URL imageURL =  Client.class.getResource("good.PNG");
URL imageURL =  Client.class.getClassLoader().getResource(File.separator + "images"+File.separator+"good.PNG");
URL imageURL =  Client.class.getClassLoader().getResource("good.PNG");

谢谢你的帮助!!!!!!!!!!

多亏了Marko Topolnik,通过将“ File.separator”替换为“ /”解决了该问题。非常感谢Marko Topolnik !!!!


问题答案:
  1. 不要使用File.separatorgetResource()-它 总是 需要/(认为它作为一个URL HREF)。
  2. 在路径之前加上前缀,/以确保类加载器从类路径的根目录而不是相对于类包的根目录进行搜索。
  3. 检查good.PNG是否正确。在Windows文件系统上无关紧要,但是getResource()区分大小写。


 类似资料:
  • 问题内容: 我已经编写了一个程序来加密Netbeans中的图像。从Netbeans运行时,该程序运行良好,但是当我将其构建为.jar文件时 ,即使我将图像文件与.jar文件放在同一文件夹中,它也无法读取图像。 //encryption //loading/writing image 问题答案: 目前尚不清楚以下哪个触发您的错误。这个 将从当前目录读取,该目录不一定与您的jar文件所在的目录相同。

  • 我对Java还很陌生,在将应用程序导出到可运行的JAR时遇到了麻烦。我的应用程序使用Saxon运行一些转换,我希望样式表可以放在可运行的JAR中。 我在src下创建了一个子文件夹,并将所有样式表放入其中。我访问它们的方式如下: 如果我在eclipse中运行它,一切工作都很好。当我将它导出为可运行的jar并运行它时,我会得到以下异常: 线程“main”java.lang.Reflect.Invoca

  • 我正在运行这个hadoop流命令: 当我尝试在我的Python映射器中引用“缓存音频”时,我收到错误:,例如: 如何指向此符号链接文件夹中的文件?

  • 我有一些限制做一个新的构建。因此,我使用winRAR工具替换了X.jar中的META-INF\maven\com.fasterxml.jackson.core\jackson-databind文件夹。

  • 知道为什么吗 工作,但是双击罐子会给一个 错误?清单被正确放置,双击直到最近还在工作,但突然之间它给出了这个错误。我不确定我做了什么改变。 编辑: 我用来创建jar的命令是(在cmd中): Main是包文件的一部分。

  • 我正在处理一个包含多个子项目的项目,它们都使用我创建的用于哈希、签名和加密消息的实用程序库。这个库基本上是bouncy Castle的包装器。 当我运行与库相关联的测试时,一切都通过了,一切都好了。当我将实用程序库打包到jar中时,会发生两件事: 正在使用库的子项目找不到与bouncy Castle关联的JAR。 即使将bouncy castle JAR添加到正在使用库的子项目中,项目也找不到bo