动态编译的直接标准输出&执行代码

时间:2015-05-29 15:50:06

标签: java compilation dynamic-code

背景资料:

  • 我使用javax.tools.JavaCompiler将代码动态编译到内存中。
  • 我使用自定义类加载器来加载和执行动态编译的代码。

我的问题

让我们说有人提供以下代码:

package cs.compile;
import java.util.Arrays;
public class Foo {
    private static int[] nums = new int[] { 1, 2, 3, 4, 5 };
    public static void main(String[] args) {
        System.out.println(getWords() + " " + Arrays.toString(nums));
    }
    public static String getWords() { return "Hello World!!!"; }
}

当我通过反射执行main()时,它工作正常。但是我希望从执行中获得标准输出和标准错误结果,并将它们保存在变量中,以便我可以返回它们。

我不知道怎么做这个,因为我认为,一旦加载了类,它与我的应用程序的其余部分共享相同的标准输出和标准错误。或许有一些标准的处理方法吗?我不想将我的整个应用程序的输出流指向远离,但我不确定如何专门针对新类。

1 个答案:

答案 0 :(得分:1)

由于正在编译它,你可以更改代码......替换System.out:)

或者您可以将全局System.out设置为自定义输出流,该输出流根据某些启发式方法重定向到不同的目标。也许有些线程本地标志?等

相关问题