2013-06-07 9 views
1

아래 메소드를 사용하여 NewFile.java라는 파일을 실행하고 있습니다.Java 파일의 동적 실행 결과 얻기

thisMethod.invoke (instance, (Object) m); 자동 내가 의 문자열

N.B.를 실행의 결과를 얻을 수 있다는 것을 어쨌든 거기는 NewFile.java를 실행하고 [존재하는 경우]를 콘솔에 결과를 출력 (String) thisMethod.invoke (instance, (Object) m)로 타입 변환; 작동하지 않았다 .. 그것은 null을 제공합니다.

public static void runIt(String fileToCompile,String packageName) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException, SecurityException, NoSuchMethodException 
     { 
      File file = new File(fileToCompile); 

      try 
      { 
       URL url = file.toURL(); // file:/classes/demo 
       URL[] urls = new URL[] { url }; 
       ClassLoader loader = new URLClassLoader(urls); 
       Class<?> thisClass = classLoader.loadClass("NewFile"); 
       Object newClassAInstance = thisClass.newInstance(); 
       Class params[] = new Class[1]; 
       params[0]=String[].class; 
       Object paramsObj[] = {}; 
       String m=null; 
       Object instance = thisClass.newInstance(); 
       Method thisMethod = thisClass.getDeclaredMethod("main", params); 
       r2+="method = " + thisMethod.toString(); 
       String methodParameter = "a quick brown fox"; 
       thisMethod.invoke(instance,(Object)m); 

      } 
      catch (MalformedURLException e) 
      { 
      } 

     } 

답변

3

invoke 메서드의 반환 값은 Object입니다. 즉, 문자열을 반환 할 수 있지만 다른 값이나 null도 반환 할 수 있습니다.

그래서 결과를 얻을 때 올바르게 처리해야합니다.

Object result = thisMethod.invoke(instance,(Object)m); 
if (result != null && (result instanceof String)){ 
    // my string result 
} 

또한 메소드를 호출 할 때 무언가를 인쇄 할뿐만 아니라 원하는 값을 반환하는지 확인하십시오.

+0

원본 Eclipse의 콘솔에서 실행 결과를 인쇄하고 플러그인 콘솔에서 null 인 결과를 인쇄하도록 플러그인에서 작업 중입니다. 도움이 필요하십니까? – CSstudent

+1

String을 반환하도록 호출하는 메서드를 변경해야합니다. 해당 메서드가 String을 반환하지 않으면 다른 메서드를 만들거나 호출해야합니다. – greedybuddha

+0

내가 돌려 줄 문자열은 어디 있습니까 ?? 문제는 변수에서 결과를 얻을 수 없다는 것입니다. – CSstudent