2014-11-03 3 views
0

Я недавно возился с ClassLoaders в java, пытаясь запустить код сценария автоматизации, который использует динамическую загрузку классов и получение ClassNotFoundException.Получение ClassNotFoundException при использовании Class.forName ("com.actitime5.Testcases." + Vriable);

##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

Можете ли вы опубликовать полный код для 'LoginLogout'? Также отредактируйте свой вопрос, чтобы показать нам, как вы запускаете эту вещь. –

+0

Добавьте код, чтобы распечатать полное имя, которое вы передаете 'forName', чтобы вы могли проверить его правильность. И временно отредактируйте замену для двух последних строк как «core.run (com.gmail5.Testcases.MyMissingClass.class);», чтобы убедиться, что это работает. (Если нет, MyMissingClass не находится должным образом в структуре каталогов.) –

ответ

1

Я думаю, что ваше имя класс замыкающие пробелы. Попробуйте выполнить trim(), прежде чем пытаться загрузить класс.

Вы можете подтвердить это, заменив

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

с

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

Я ожидаю, что это будет печатать что-то вроде следующего:

Sheet Name 'LoginLogout ' 

Когда я нажал 'изменить' в отредактируйте свой вопрос, я мог видеть, что после имени класса в трассировке стека было завершающее пробелы и в вас r Sheet Name сообщение. (Я ничего не изменил в вашем вопросе: я просто использовал функцию «Редактировать», чтобы увидеть исходный текст вашего вопроса, а затем щелкнул «Отмена».)

+0

Спасибо, что вы правы, было пустое пространство, я получил это имя класса из листа xlsx, и после названия класса было пустое пространство. –

Смежные вопросы