【发布时间】:2016-03-22 15:02:04
【问题描述】:
我正在开发一个从 xsd 创建 Java 类的项目。在运行时,我想创建类并读取这些类的名称。但是,当我第一次运行项目时(在创建类之前),它给了我一个错误,上面写着 "java.lang.ClassNotFoundException: generated.classes.AddressType" 。如果我再次运行,而不更改任何内容(此时创建了类),它不会给我一个错误。我使用“com.sun.tools.xjc.api”来创建类。当我想读取类名时,我只需这样做
File folder = new File(System.getProperty("user.dir")+"\\src\\generated\\classes");
File[] listOfFiles = null;
List<String> namesOfClasses = new ArrayList<>();
listOfFiles=folder.listFiles();
for(File file: listOfFiles){
try {
if(!file.getName().equals("ObjectFactory.java")){
String classname="generated.classes."+file.getName().substring(0, file.getName().length() - 5);
namesOfClasses.add(classname);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return namesOfClasses;
看来,新创建的类在运行时是看不到的。如何让这些类在运行时读取?
【问题讨论】:
-
我看不到共享代码如何抛出
ClassNotFoundException。因为从目录中读取类名与类加载无关。 -
我的猜测 - 你的代码生成
.java文件,我们需要.class来加载一个类。我猜您正在使用具有自动构建功能的 IDE,或者您的程序在下次运行时选择class文件的方式。
标签: java class xsd runtime xjc