Одобрен механизм dir не работает?
Мне нужно отладить что-то происходящее внутри классов JDK 1.8. Я пытаюсь использовать одобренный механизм dir, упомянутый здесь, но, похоже, не работает для меня. Вот что я сделал (на Windows):
- скопировал
javax.swing.plaf.basic.BasicListUI
исходный код класса в<JDK_HOME>/jre/lib/endorsed/javax/swing/plaf/basic/
Модифицировал код класса, добавив:
static { System.out.println("REPLACED BasicListUI"); }
Я ожидаю, что это приведет к тому, что сообщение будет напечатано, как только класс будет загружен.
кд
<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
Что мне не хватает?
1 ответ
Решение
Ах, нашел проблему. Классы должны быть упакованы в файл jar. Итак, добавил
jar cvf rt.jar javax/swing/plaf/basic/BasicListUI.class