Одобрен механизм dir не работает?

Мне нужно отладить что-то происходящее внутри классов JDK 1.8. Я пытаюсь использовать одобренный механизм dir, упомянутый здесь, но, похоже, не работает для меня. Вот что я сделал (на Windows):

  1. скопировал javax.swing.plaf.basic.BasicListUI исходный код класса в <JDK_HOME>/jre/lib/endorsed/javax/swing/plaf/basic/
  2. Модифицировал код класса, добавив:

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

    Я ожидаю, что это приведет к тому, что сообщение будет напечатано, как только класс будет загружен.

  3. кд <JDK_HOME>/jre/lib/endorsed и беги javac javax/swing/plaf/basic/BasicListUI, Это приводит к BasicListUI.class файл создан в том же каталоге, что и исходный файл.

  4. написал и скомпилировал эту программу:

    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"));
        }
    }
    
  5. выполненная программа с 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. Итак, добавил

  1. jar cvf rt.jar javax/swing/plaf/basic/BasicListUI.class
Другие вопросы по тегам