Java路径、ImageIcon、URL和.JAR

3

我可能已经尝试过,但都不起作用...

文件是:

/Users/Toto/Desktop/Titi/IUT/Java/TP2/project/src/fichierPointJava/img1.png

fichierPointJava是一个包的名称。

在包含build.xml文件的项目中,我运行ant。

以下是我测试过的代码:

URL urlImage1=this.getClass().getClassLoader.getResource("/src/fichierPointJava/img1.png");
URL urlImage1=this.getClass().getClassLoader.getResource("/fichierPointJava/img1.png");
URL urlImage1=this.getClass().getClassLoader.getResource("fichierPointJava/img1.png");
URL urlImage1=this.getClass().getClassLoader.getResource("/img1.png");
URL urlImage1=this.getClass().getClassLoader.getResource("img1.png");

System.out.println("Value = "+ urlImage1);

我已经制定了一份遗嘱,无论是否使用this,以及是否使用getClassLoader()

希望有人能够帮助我。

谢谢你。


1
你确定它在你的jar包里吗?我会打开它并进行验证。 - greedybuddha
1个回答

3
如果您有以下包布局
+---src
    |   img0.png
    \---fichierPointJava
        |       img1.png
        |       <YourClass.java>

那么以下内容应该可以正常工作

// using the classloader in instance context
getClass().getClassLoader().getResource("img0.png");
getClass().getClassLoader().getResource("fichierPointJava/img1.png");

// using the classloader in class/static context
<YourClass>.class.getClassLoader().getResource("img0.png");
<YourClass>.class.getClassLoader().getResource("fichierPointJava/img1.png");

// using the class in instance context
getClass().getResource("../img0.png");
getClass().getResource("/img0.png");
getClass().getResource("img1.png");
getClass().getResource("/fichierPointJava/img1.png");

// using the class in static/class context
<YourClass>.class.getResource("../img0.png");
<YourClass>.class.getResource("/img0.png");
<YourClass>.class.getResource("img1.png");
<YourClass>.class.getResource("/fichierPointJava/img1.png");

当使用ClassLoader时,您需要传递资源的完全限定名称,即包括包名称。
当使用Class时,路径(如果不以/开头)是相对于试图加载资源的类所在的包,否则它是资源的绝对名称。
您可以在javadocs中了解有关ClassLoader#getResourceClass#getResource的更多信息。
请确保您运行的ant目标包括*.png资源。您可以通过使用所选的zip工具打开jar文件来验证此操作。目录src不应包括在内。

谢谢,但它不起作用...URL urlImage1 = getClass().getClassLoader().getResource("fichierPointJava/img1.png"); System.out.println("Value = " + urlImage1);它打印出“null” - user2437640
@AymenZero 然后检查一下图像是否已经打包进了jar文件中! - A4L
0 Tue Jun 04 20:49:28 CEST 2013 META-INF/ 143 Tue Jun 04 20:49:26 CEST 2013 META-INF/MANIFEST.MF 0 Tue Jun 04 20:49:24 CEST 2013 fichierPointJava/ 1398 Tue Jun 04 20:49:24 CEST 2013 fichierPointJava/Femme$1.class 5332 Tue Jun 04 20:49:24 CEST 2013 fichierPointJava/Femme.class是的,JAR文件中没有这个文件。所以,我需要在build.xml中进行操作吗?还是其他什么方法?感谢大家的帮助。 - user2437640
我做到了!谢谢你告诉我我忘记了那些文件.. 需要添加的是这一行:<fileset dir="${src.dir}/fichierPointJava"> - user2437640
@AymenZero 最后,getResource()是您调用以检索资源位置的方法,因此您可以访问它,显然返回值是一个URL,请参见我在答案末尾发布的链接。您还可以查看getResourceAsStream,它返回一个InputStream,您可以使用它来读取您的资源。 - A4L
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接