2013-10-08 200 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文件的位置並不重要 - 必須將它們編譯爲字節碼,然後才能嘗試在運行時使用它們。