Java 如何在运行时知道资源所在的jar?

Java 如何在运行时知道资源所在的jar?,java,jar,classloader,Java,Jar,Classloader,我的jar文件中有一个图像,我正在使用另一个也有图像的jar文件。 如何在运行时知道存在特定映像资源的jar文件 对于一个类,我可以使用 getClass().getProtectionDomain().getCodeSource().getLocation() 但在我的情况下,这是一个形象 资源的URL的格式为jar:URL of jar file!入口路径。忽略错误检查: URL resURL = getClassLoader().getResource(resName); // =

我的jar文件中有一个图像,我正在使用另一个也有图像的jar文件。 如何在运行时知道存在特定映像资源的jar文件

对于一个类,我可以使用

   getClass().getProtectionDomain().getCodeSource().getLocation()

但在我的情况下,这是一个形象

资源的URL的格式为jar:URL of jar file!入口路径。忽略错误检查:

URL resURL = getClassLoader().getResource(resName);
// ==> resURL = jar:ORIGINAL_URL!resName
String path = resURL.getPath();
// ==> path = ORIGINAL_URL!resName
URL jarURL = new URL(path.substring(0, path.indexOf('!'));
// ==> jarURL = ORIGINAL_URL
如果您有能力创建连接,您也可以这样做:

JarURLConnection conn = (JarURLConnection) resUrl.openConnection();
URL jarURL = conn.getJarFileURL();

你为什么认为你需要知道位置?我已经使用this.getClass.getResourcepath/name.type从应用程序运行时类路径上的JAR加载了图像、HTML、CSS、文本文件、XML和大量其他内容,以获取URL。如果是小程序或JWS应用程序。该URL将始终指向它来自的服务器,即使它是本地缓存的。这样做是出于安全原因。简言之,我使用URL提供给其他方法,例如ImageIO.readURL,而从未费心检查或“知道”它指向何处。为什么他想这样做很重要?我的应用程序需要知道jar,并基于此,需要采取不同的行动。你在回复我吗?如果是,请添加@MyName作为前缀,以便我得到通知。我可以尖刻地回答你的问题?*但我会扩展。人们经常以错误的方式做正确的事情。如果他们陈述了这个特性,有时会带来更好的方法,而这通常与他们最初试图“做”的事情无关。每次出现解释时,我都懒得打字,所以就把它当作一个问题扔出去吧。如果OP有意识和能力回答问题,对他们来说可能会很顺利。如果没有,我就不必担心了。需要采取不同的行动。什么行动?以什么方式不同?多细节总比少细节好。另外,如果你能将其简化为一个“程序功能”,比如“提供具有新地形和任务的插件”“更大、更白、更亮的文本”。。这是什么特点?