【发布时间】:2014-11-03 19:15:43
【问题描述】:
我最近一直在搞乱 Java 中的 ClassLoaders,试图运行我的自动化脚本代码,该代码使用动态加载类并获取 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.*;,但它仍然抛出异常
【问题讨论】:
-
你能发布
LoginLogout的完整代码吗?同时编辑你的问题,向我们展示你是如何运行这个东西的 -
添加代码以打印出您传递给
forName的全名,这样您就可以仔细检查它是否正确。并临时将最后两行替换为core.run(com.gmail5.Testcases.MyMissingClass.class);,以确保其有效。 (如果不是,MyMissingClass 在目录结构中的位置不正确。)
标签: java class classloader