我有一個在Eclipse中開發的java應用程序。ClassNotFoundException當在IDE之外運行時
系統上有一個文件夾,其中包含大量「.java」文件。這些「.java」文件是某些用戶編寫的類。我希望加載所有這些Java類並在我的Java應用程序中編譯它們。
所有「.java」文件的另一個屬性是所有寫在裏面的類擴展了一個類,它在我的原始應用程序中。
我用下面的語言來閱讀和編譯所有的類。
File parentFile = new File(rulesDir + "\\");
String fileName = rulesDir + "\\" + ruleName + ".java";
File ruleFile = new File(fileName);
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, ruleFile.getPath());
// Load and instantiate compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { parentFile.toURI().toURL() });
Class<? extends AbstractRule> cls = (Class<? extends AbstractRule>)Class.forName(ruleName, true, classLoader);
如果我運行在Eclipse上面的代碼,它工作正常。當我從運行應用程序作爲一個罐子其他地方,它拋出了線 Class<? extends AbstractRule> cls = (Class<? extends AbstractRule>)Class.forName(ruleName, true, classLoader);
這究竟是爲什麼一個
?有什麼不同,它在Eclipse中執行,不通過命令行?ClassNotFoundException
在Eclipse中使用的IDE與您在何處運行JAR的版本相同? 要檢查您的Eclipse JRE,請執行以下操作:單擊「窗口」,然後單擊「首選項」菜單中的「首選項」,選擇已安裝的JRE。 –
在Class.forName之前缺少括號。錯字? – ManoDestra
已修改。這是一個錯字。在eclipse中沒有語法錯誤 – Kaushik