Когда будут рассмотрены два класса? Например, есть ли что-то, действующее как подпись класса? Если да, то что подсчитывает подпись, информация о пакете, имя класса и т. Д.? Я спрашиваю об этом, потому что мне нужно динамически загружать класс, и я всегда получал ClassNotFoundException
Подпись класса Java и динамическая загрузка
Немного подробнее: Я использую Eclipse. У меня abstract class Panel
в моем package com.example.project.sub1
. И class Test
в package com.example.project.sub2
, который будет вызывать
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
. Любая идея, где я ошибаюсь? Благодарю.
EDIT: Трассировка стека:
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)
Скорее всего, файл находится в неправильном месте. Можете ли вы показать все пути? И все исключение? – Thilo
@Thilo Я использовал JFileChooser для поиска файла, поэтому я предполагаю, что путь правильный? Я включаю трассировку стека за минуту, хотя на первый взгляд это не помогает. – YankeeWhiskey
Это полезно ;-) Это показывает, что вы используете неправильное имя класса (пакет отсутствует). – Thilo