2012-09-27 74 views
7

我使用下面的代碼::的Class.forName是給ClassNotFound的異常

String className = "SmsHelper" 
Class c = Class.forName(className); 

我正在以下

堆棧跟蹤::

inside main java.lang.ClassNotFoundException: SmsURLHelper 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at com.tcs.sms.actions.SmsUtil.invoke(SmsUtil.java:131) 

注:SmsHelper類存在。

請建議如果我錯過了任何事情。

+1

這是真正的,完全合格的班級名稱? 'SmsHelper','SmsURLHelper'或'com.foo.bar.SmsURLHelper'? –

回答

15

使用完全限定名稱。

實施例:

Class.forName("com.yourownpackage.SmsHelper"); 
+0

感謝您的回答... –

+0

不客氣。 – Mik378

4

請寫出類名與它的包名稱(你的類駐留)作爲的forName方法的字符串一起。下面是使用示例:

String className = "com.testpackage.SmsHelper"; 
Class c = Class.forName(className); 
3
  1. class.forName()需要一個完全合格的類名 - 如com.tcs.foo.bar.SmsURLHelper

  2. 爲什麼不直接寫SmsHelper.class - 這將在編譯時檢查,編譯爲對class.forName()的適當調用。