我最近在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.*;
,但它仍会抛出异常
答案 0 :(得分:1)
我认为你的类名有尾随空格。在尝试加载课程之前,请尝试trim()
将其关闭。
您可以通过替换
来确认System.out.println("Sheet Name"+" "+scriptnam);
与
System.out.println("Sheet Name"+" '"+scriptnam+"'");
我希望这会打印出如下内容:
Sheet Name 'LoginLogout '
当我点击&#39;编辑&#39;编辑你的问题,我可以看到堆栈跟踪和你的Sheet Name
消息中的类名后面有空格。 (我没有改变你的问题:我只是使用编辑功能查看问题的原始文本,然后点击取消。)