使用Class.forName时获取ClassNotFoundException(" com.actitime5.Testcases。" + vriable);

时间:2014-11-03 19:15:43

标签: java class classloader

我最近在Java中乱用ClassLoaders,试图运行我的自动化脚本代码,该代码使用动态加载类和geting ClassNotFoundException

##MyCode

package com.actitime5.frameworkengine;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import com.gmail5.Testcases.LoginLogout;

import org.junit.runner.JUnitCore;
public class Init {

public static void main(String args[]) throws Exception
{
Init in=new Init();
String url=in.getConfigValue("url");
ExcelLibrary lib=new ExcelLibrary();
JUnitCore core = new JUnitCore();
int numberofTestcases=lib.getRowCont("Scenario");
System.out.println(numberofTestcases);
for(int i=1;i<=numberofTestcases;i++)
{String status=lib.getExcelData("Scenario", i, 1);
if(status.equals("yes"))
{String scriptnam=lib.getExcelData("Scenario", i, 0);
System.out.println("Sheet Name"+" "+scriptnam);
Class scriptToRun= Class.forName("com.gmail5.Testcases."+scriptnam);

core.run(scriptToRun);
}

}}

##Errors that i am getting :

1
Sheet Name LoginLogout   
Exception in thread "main" java.lang.ClassNotFoundException:com.gmail5.Testcases.LoginLogout   
at java.net.URLClassLoader$1.run(Unknown Source)
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.gmail5.frameworkengine.Init.main(Init.java:24)

我尝试加载的类在包中提供:com.gmail5.Testcases.*;,但它仍会抛出异常

1 个答案:

答案 0 :(得分:1)

我认为你的类名有尾随空格。在尝试加载课程之前,请尝试trim()将其关闭。

您可以通过替换

来确认
System.out.println("Sheet Name"+" "+scriptnam);

System.out.println("Sheet Name"+" '"+scriptnam+"'");

我希望这会打印出如下内容:

Sheet Name 'LoginLogout    '

当我点击&#39;编辑&#39;编辑你的问题,我可以看到堆栈跟踪和你的Sheet Name消息中的类名后面有空格。 (我没有改变你的问题:我只是使用编辑功能查看问题的原始文本,然后点击取消。)