作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写Java应用程序,我想编写一些简单的插件系统。我想要有基类插件。其他类扩展了插件,这些文件位于类路径之外的其他目录中。
public class Plugin {
public Plugin() {
//code
}
public void proc() {
//code
}
}
和类加载器:
public class PluginLoader {
private static final FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return Pattern.matches("^.*[a-zA-Z]*[.]class$", name);
}
};
public static final String removeExtension(String str) {
if (str == null)
return null;
int pos = str.lastIndexOf(".");
if (pos == -1)
return str;
return str.substring(0, pos);
}
@SuppressWarnings("unchecked")
public static LinkedList<Plugin> loadEffects(String path) {
LinkedList<Plugin> result = new LinkedList<Plugin>();
Plugin instance = null;
File[] classesList = null;
System.out.println("Searching in " + path);
try {
File classDir = new File(path);
URL[] url = { classDir.toURI().toURL() };
URLClassLoader urlLoader = new URLClassLoader(url);
String filename;
classesList = classDir.listFiles(filter);
System.out.println(classesList.length + " class files found:");
for (File file : classesList) {
System.out.println("- " + file.getName());
}
for (File file : classesList) {
filename = removeExtension(file.getName());
if (filename.equals(".") || filename.equals("..") || filename.startsWith("."))
continue;
if (filename.equals("Plugin")) {
System.err.println("File name is Plugin");
continue;
}
System.out.println("Reading " + filename);
instance = (Plugin) urlLoader.findClass(filename).getConstructor().newInstance();
System.out.println("Adding: " + url + ", " + filename);
result.push(instance);
}
urlLoader.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
此代码会导致java.lang.NoClassDefFoundError:D:\test\PluginImpl/class(错误名称:test/PluginImpl)。插件类位于 D:\test 中。
最佳答案
您正在调用 File#getAbsolutePath(),它将包含整个路径和驱动器号 (D:\
)。类中存储的类名与您提供的类名不匹配,因此 Java 会抛出错误。
尝试仅使用类名调用 findClass,它应该可以工作
关于java - 如何从.class文件中读取Java类def?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580490/
我是一名优秀的程序员,十分优秀!