2013-06-07 5 views
1

Я использую метод ниже для выполнения файла с именем NewFile.java.Получение результата динамического выполнения java-файла

Линия thisMethod.invoke (экземпляр, (объект) m); автоматически запускает NewFile.java и выводит результат [если существует] в консоли , есть в любом случае, что я могу получить результат выполнения в строку

нотабене Указание типа (String) thisMethod.invoke (экземпляр, (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 является объектом. Таким образом, это означает, что он может возвращать строку, но также любое количество других значений или даже null.

Так что просто убедитесь, что когда вы получите результат, который вы правильно обрабатываете.

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

Кроме того, убедитесь, что в методе вы вызываете, что вы не только печатать что-то, но и возвращая значение, которое вы хотите.

+0

Я работаю над плагином, чтобы напечатать результат выполнения в исходной консоли Eclipse и распечатать результат, который является нулевым в консоли плагина. Любая помощь? – CSstudent

+1

вам нужно изменить метод, который вы вызываете, чтобы вернуть строку. Если этот метод не возвращает String, вам нужно будет сделать или вызвать другой метод. – greedybuddha

+0

Где строка, которую я собираюсь вернуть? Проблема в том, что я не могу получить результат в переменной – CSstudent