2013-10-08 157 views
0

我想从磁盘上的某个位置复制包含类(MyTestClass,包“test”)中的.java文件。我想获得这个文件包含的类。也许我的代码会很有用。这是我的代码:在运行时创建类

File generatedFile = new File(DIR_CONTAINING_FILE + "/" + className + ".java"); 
FileUtils.copyFileToDirectory(generatedFile, COPY_FILE_DIR); 
Class cl = Class.forName("test.MyTestClass"); 

复制文件工作正常。它显示了它必须在哪里。

当我手动将我的文件复制到COPY_FILE_DIR然后启动程序时它会工作,它会找到我的班级。但是,当我开始我的程序没有复制文件(我的意思是当我让它做到我的程序),我得到了ClassNotFoundException。当我刷新目录有我的文件,所以它已被完美复制。

在这一刻我可以再次启动我的程序和..魔术!它会找到我的班级!看起来像我需要刷新从Java目录或做别的事情..我不知道该怎么做。任何帮助将不胜感激。

+3

您必须首先编译Java源文件,然后才能加载该类。 – Jesper

+0

为了加载一个类,它必须先被编译。因此对于'Class.forName(“test.MyTestClass”)'工作,那么你正在运行的程序的类路径上必须有一个'MyTestClass.class'文件。我的猜测是,当您手动复制时,您正在使用一些为您编译.java文件的IDE。如果您真的想要,可以在运行时编译该类,并使用自定义类加载器加载它(请参阅http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html) – SamYonnou

+0

你是否开始申请?在第二次启动时,类路径包含已编译的类,从您复制的源文件到实际的文件夹......似乎运行您的应用程序也会触发编译源代码 – ppeterka

回答

1

看来你必须熟悉JavaCompiler API才能做到这一点。存储.java文件的位置并不重要 - 必须将它们编译为字节码,然后才能尝试在运行时使用它们。