gpt4 book ai didi

Java类签名和动态加载

转载 作者:行者123 更新时间:2023-12-01 23:42:28 25 4
gpt4 key购买 nike

什么时候两个类被认为是相同的?比如,有什么东西可以充当类的签名吗?如果是这样,签名、包信息、类名等重要什么?我问这个是因为我需要动态加载一个类,并且我总是遇到 ClassNotFoundException

更详细一点:我正在使用 Eclipse。我的包com.example.project.sub1中有一个抽象类Panel。以及 package com.example.project.sub2 中的 class Test,它将调用

ClassLoader loader = new URLClassLoader(        new URL[]{new URL("file://" + path)});                /*the path is specified runtime and can be in a different                  directory other than working directory. It's the path                   to the parent directory of the class file I need to load.                */Class<Panel> panelClass = (Class<Panel>)loader.loadClass(className);                //class name is runtime specified.

编译得很好。然后,我将 Panel.java 中的所有内容复制到一个新目录中,并创建了 class MyPanel extends Panel 以及 Panel.java。编译也很好,但是当我指定新的 MyPanel.class 的路径时,我总是得到一个 ClassNotFoundException。知道我错在哪里吗?谢谢。

编辑:堆栈跟踪:

java.lang.ClassNotFoundException: MyPanel    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)    at com.example.project.sub2 (Test.java:111)    at java.lang.Thread.run(Thread.java:680)

最佳答案

java.lang.ClassNotFoundException: MyPanel

该类不名为“MyPanel”,而是“com.example.project.sub1.MyPanel”。

It's the path to the parent directory of the class file I need to load.

是的,那行不通。它必须是包层次结构根目录,因此不是“/some/path/classes/com/example/project/sub1/”,而是“/some/path/classes”

关于Java类签名和动态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17692176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com