Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getResourceAsStream():如何确定首先搜索的位置?_Java_Jar_Classpath_Directory_Bufferedimage - Fatal编程技术网

Java getResourceAsStream():如何确定首先搜索的位置?

Java getResourceAsStream():如何确定首先搜索的位置?,java,jar,classpath,directory,bufferedimage,Java,Jar,Classpath,Directory,Bufferedimage,想象一下下面的文件夹结构 文件夹 App.jar img(实际上我不知道它在那里) 在App.jar中还有img文件夹 因此,我使用以下代码来读取图像img InputStream is = IconManager.class.getClassLoader().getResourceAsStream("img/1.png"); BufferedImage bimage = ImageIO.read(is); is.close(); 我以前就知道,这个代码片段非常适合从jar本身读取文件

想象一下下面的文件夹结构

  • 文件夹
    • App.jar
    • img(实际上我不知道它在那里)
在App.jar中还有
img
文件夹

因此,我使用以下代码来读取图像img

InputStream is = IconManager.class.getClassLoader().getResourceAsStream("img/1.png");
BufferedImage bimage = ImageIO.read(is);
is.close();
我以前就知道,这个代码片段非常适合从jar本身读取文件。但由于碰巧在
文件夹中有过时的img版本,它开始从外部
img
:文件夹/img而不是jar本身读取图像文件。我花了很多时间来弄清楚

我的问题是,为什么默认情况下,代码段尝试从文件夹/img而不是App.jar读取?

UPD:我使用
java-jarapp.jar
文件夹运行它


我使用windows 7,在构建jar之前从未在Eclipse中指定
类路径

更改类路径中项目的顺序我相信搜索顺序基本上取决于
类加载器
。它可以选择使用该文件夹,因为它首先在类路径上列出,或者完全出于其他原因。App.jar也可能有一个
ClassLoader
,它被配置为使用“父级优先”策略(尽管这更可能发生在jboss之类的服务器环境中),这意味着它将首先要求其父级
ClassLoader
查找资源,然后再检查自己的类路径。也许有人可以确认/纠正我。@hoaz,我没有指定任何类路径,我是从Eclipse@NikolayKuznetsov这只意味着Eclipse为您指定了类路径,您仍然可以更改顺序。如果您只有一个项目,那么我建议您从JAR文件中提取清单,按照您想要的方式编辑它,并将其放入您的项目中,然后在导出jar对话框中指定这个清单文件,eclipse将包含它,而不是生成默认清单文件