认可的目录机制不起作用?
endorsed dir mechanism not working?
我需要调试 JDK 1.8 classes 中发生的事情。我正在尝试使用提到的 endorsed 目录机制 here,但似乎对我不起作用。这就是我所做的(在 Windows):
- 将
javax.swing.plaf.basic.BasicListUI
class 源代码复制到 <JDK_HOME>/jre/lib/endorsed/javax/swing/plaf/basic/
修改了class代码,添加:
static {
System.out.println("REPLACED BasicListUI");
}
我希望这会在加载 class 后立即打印消息。
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
我需要调试 JDK 1.8 classes 中发生的事情。我正在尝试使用提到的 endorsed 目录机制 here,但似乎对我不起作用。这就是我所做的(在 Windows):
- 将
javax.swing.plaf.basic.BasicListUI
class 源代码复制到<JDK_HOME>/jre/lib/endorsed/javax/swing/plaf/basic/
修改了class代码,添加:
static { System.out.println("REPLACED BasicListUI"); }
我希望这会在加载 class 后立即打印消息。
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