Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 如何让对象/类告诉我它来自哪个jar文件_Java_Eclipse_Reflection - Fatal编程技术网

Java 如何让对象/类告诉我它来自哪个jar文件

Java 如何让对象/类告诉我它来自哪个jar文件,java,eclipse,reflection,Java,Eclipse,Reflection,在Eclipse中,正在加载一个不可能的类。在调试模式下,我可以暂停它并查看对类a.b.c的调用,但a.b.c类应该在重命名后的任何位置存在。我的假设是调用了一个旧的jar文件……但我找不到它。那么,在eclipse中处于调试模式时,如何找到类a.b.c所在的jar文件呢?可以通过eclipse菜单选项,也可以通过Java和反射让对象告诉我它自己的jar文件 谢谢。如果您使用-verbose:class启动JVM(您可以在Eclipse中将其设置为JVM选项),您可以准确地看到何时加载哪些类,以

在Eclipse中,正在加载一个不可能的类。在调试模式下,我可以暂停它并查看对类a.b.c的调用,但a.b.c类应该在重命名后的任何位置存在。我的假设是调用了一个旧的jar文件……但我找不到它。那么,在eclipse中处于调试模式时,如何找到类a.b.c所在的jar文件呢?可以通过eclipse菜单选项,也可以通过Java和反射让对象告诉我它自己的jar文件


谢谢。

如果您使用-verbose:class启动JVM(您可以在Eclipse中将其设置为JVM选项),您可以准确地看到何时加载哪些类,以及从何处加载这些类。

您可以“F3”(打开类)吗?即使它没有反编译,也应该向您显示jar文件。

在许多情况下,编译的
.class
文件仍然可供Eclipse(及其JVM)使用,尽管您已经删除或重命名了源代码


为了确保这不会愚弄您,您可以在Eclipse中运行
Project | Clean
,或者直接进入Navigator视图并删除您的classes目录(标准是
bin
),然后让Eclipse重新构建它。

您可以使用类加载器来检索资源的URL。这也适用于类。要获取
java.lang.String
类的位置:

X.class.getClassLoader().getResource("java/lang/String.class");
输出:

jar:file:/C:/Program%20Files/Java/jdk1.6.0_17/jre/lib/rt.jar!/java/lang/String.class

如果某个地方有一个旧罐子,您可以通过指定要查找的类,让找到它。
这是一种独立的(即不涉及一些额外的代码)查找jar的方法

您也可以使用“打开类型”对话框(
Ctrl+Shift+T
)。键入类的名称,如果Eclipse找到它,它将显示它来自的jar


但是,请注意,Eclipse看到的类路径不一定与运行时类路径相同。

感谢您的帮助,Thomas Jung的解决方案是:


getClassLoader().getResource(“java/lang/String.class”)

这个确实非常有用,不幸的是它是一个老式的WSAD/RAD插件。不确定它是否适用于现代Eclipse环境。我检查了这个网站,上一次更新是从2007年开始的…刚刚尝试了这个,可以验证它是否有效。JVM:java版本“1.6.0_17”java(TM)SE运行时环境(build 1.6.0_17-b04)java热点(TM)客户端VM(build 14.3-b01,混合模式)“java-verbose:class MyClass”的示例输出:[打开的C:\Program Files\java\jre6\lib\rt.jar][从C:\Program Files\java\jre6\lib\rt.jar加载的java.lang.Object]…您还可以执行以下操作:X.class.getProtectionDomain().getCodeSource().getLocation()Hi i put String而不是X。我的代码是String.class.getClassLoader().getResource(“java/lang/String.class”);但我得到了空指针异常