簡體   English   中英

URLClassLoader無法正常工作

[英]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.classfile:/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM