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目錄或做別的事情..我不知道該怎麼做。任何幫助將不勝感激。
您必須首先編譯Java源文件,然後才能加載該類。 – Jesper
爲了加載一個類,它必須先被編譯。因此對於'Class.forName(「test.MyTestClass」)'工作,那麼你正在運行的程序的類路徑上必須有一個'MyTestClass.class'文件。我的猜測是,當您手動複製時,您正在使用一些爲您編譯.java文件的IDE。如果您真的想要,可以在運行時編譯該類,並使用自定義類加載器加載它(請參閱http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html) – SamYonnou
你是否開始申請?在第二次啓動時,類路徑包含已編譯的類,從您複製的源文件到實際的文件夾......似乎運行您的應用程序也會觸發編譯源代碼 – ppeterka