我需要调试JDK 1.8类中发生的事情。我正在尝试使用提到的here认可的dir机制,但似乎对我没有用。这是我所做的(在Windows上):


javax.swing.plaf.basic.BasicListUI类源代码复制到<JDK_HOME>/jre/lib/endorsed/javax/swing/plaf/basic/
修改了类代码,添加:

static {
    System.out.println("REPLACED BasicListUI");
}


我希望这会导致在加载类后立即打印消息。
cd到<JDK_HOME>/jre/lib/endorsed并运行javac javax/swing/plaf/basic/BasicListUI。这将导致BasicListUI.class文件在与源文件相同的目录中生成。
编写并编译了该程序:

import javax.swing.plaf.basic.BasicListUI;
public class t {
    public static void main(String args[]) {
        System.out.println(System.getProperty("java.endorsed.dirs"));
        System.out.println(BasicListUI.class.getResource("BasicListUI.class"));
    }
}

java t执行程序。我没有看到REPLACED BasicListUI消息,该程序的输出为:

C:\Program Files\Java\jdk1.8.0_40\jre\lib\endorsed
jar:file:/C:/Program%20Files/Java/jdk1.8.0_40/jre/lib/rt.jar!/javax/swing/plaf/basic/BasicListUI.class



另外,如果我运行:

$ java -verbose t | grep BasicListUI


输出为:

[Loaded javax.swing.plaf.basic.BasicListUI from C:\Program Files\Java\jdk1.8.0_40\jre\lib\rt.jar] jar:file:/C:/Program%20Files/Java/jdk1.8.0_40/jre/lib/rt.jar!/javax/swing    /plaf/basic/BasicListUI.class


我想念什么?

最佳答案

啊,发现问题了。这些类必须打包在jar文件中。因此,添加


jar cvf rt.jar javax/swing/plaf/basic/BasicListUI.class

08-03 17:18