java - 认可的 dir 机制不起作用?

标签 java java-8 endorsed

我需要调试 JDK 1.8 类中发生的事情。我正在尝试使用提到的 endorsed dir 机制 here ,但似乎不适合我。这就是我所做的(在 Windows 上):

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

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

    我希望这会在类加载后立即打印消息。

  3. cd 至 <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

我错过了什么?

最佳答案

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

  • jar cvf rt.jar javax/swing/plaf/basic/BasicListUI.class
  • 关于java - 认可的 dir 机制不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013959/

    相关文章:

    Java WebStart 和认可的目录

    java - 如何替换 Java 9 中的认可目录?

    java - 从 java 创建 SQL 函数会导致异常

    java - java中旋转图像

    java - 如何正确确定一个对象是 lambda?

    java - 通过使用相同名称的键连接列表来组合多个 Map<String,List> 结构

    java - 构建项目给了我 java.lang.LinkageError : JAXB 2. 1 API is being loaded from the bootstrap classloader

    java - 工厂类的 create() 方法应该是静态的吗?或者制作工厂类单例?

    java - 调用 Java 关键字 super

    java - 方法引用属于什么类?