我有一个javafx窗口,当我将.class文件拖入其中时,我想将它们“转换”为Class〈?〉
我试过使用Class.forname,问题是你必须知道包,这不是我的情况。我试过用缓冲读取器读取.class文件来检索里面的包,但当然不可能读取.class文件。
因此,我需要找到一种方法,将任何.class文件转换为代码中的Class〈?〉,而不管它在计算机上的位置。
@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasFiles()) {
for (File file : db.getFiles()) {
String fileName = file.getName();
// Vérifiez si le fichier a l'extension .class
if (fileName.endsWith(".class")) {
//TODO
//GlobalView.getInstance().addClassNode(new ClassNode(new Class( the Class<?> object )));
}
}
}
event.setDropCompleted(success);
event.consume();
}
1条答案
按热度按时间5n0oy7gb1#
您的问题之一是您不知道类的包,并且您不能从文件路径合理地确定它。
您可以使用Apache Commons BCEL来解析文件,以获取包以及关于它的大量其他信息。
从那里,您可以使用URLClassLoader按名称实际加载类,前提是该类的所有依赖项都已加载或可加载:
如果类的依赖项是不可加载的,那么你需要重新考虑你的方法。加载一个没有依赖项的类是不可能的,而且当用户只是拖放一个文件时,这个文件可能依赖于你没有合理方法找到的类。
很有可能BCEL返回的
JavaClass
示例已经包含了您需要的所有信息,而您实际上根本不需要加载类。您没有足够具体地说明您使用Class示例的目的,所以我不能肯定。