[英]URLClassLoader not working
我想在目錄F:/ badge-dao / bin / com / badge / dao / impl /中加載一個名為BadgeDaoImpl的文件 。 我正在編寫和測試以下代碼。
如果我更改目錄或類名,則會引發異常。 對於下面的代碼,我認為它應該工作,它不會拋出classNotFoundException,而是暫停並將控制權交給EventTable的finally塊。
你能告訴我在哪里弄錯了嗎?
URL[] urls = {new URL("file:/F:/badge-dao/bin/com/badge/dao/impl/")};
ClassLoader parentClassLoader = project.getClass().getClassLoader();
URLClassLoader classLoader = new URLClassLoader(urls, parentClassLoader);
selectedClass = classLoader.loadClass("BadgeDaoImpl");
包名稱是完整類名的一部分,而不是類路徑項,因此您需要以下內容:
URL[] urls = {new URL("file:/F:/badge-dao/bin")};
...
selectedClass = classLoader.loadClass("com.badge.dao.impl.BadgeDaoImpl");
在原始代碼中,類加載器可以在file:/F:/badge-dao/bin/com/badge/dao/impl/
找到名為BadgeDaoImpl.class
的file:/F:/badge-dao/bin/com/badge/dao/impl/
,但是它的完整類名稱( com.badge.dao.impl.BadgeDaoImpl
)與請求的( BadgeDaoImpl
)不匹配,因此類加載器拋出NoClassDefFoundError
。 由於您只捕獲ClassNotFoundException
,因此看起來控件會以靜默方式傳遞給finally
塊。 當您更改文件夾或類名以便找不到.class
文件時,將按預期拋出ClassNotFoundException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.