gpt4 book ai didi

java - 通过java中的反射调用具有无限循环的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:35 25 4
gpt4 key购买 nike

我创建了一个编辑器,它具有针对 Java 源文件的编译和运行选项。问题是,当我通过反射运行一个具有无限循环的方法时,编辑器挂了...

        Method thisMethod = thisClass.getDeclaredMethod("main", String[].class);
thisMethod.invoke(null, (Object) new String[0]);

如果 main 方法有像这样的无限循环:

        public static void main(String[] args) {
while(true)
System.out.println("loop ");
}

然后我必须从任务管理器中明确退出编辑器。

我想添加一个功能,在程序出现无限循环时强制停止程序的运行。

那么,如何停止一个正在运行的无限循环的方法呢?

最佳答案

在单独的进程中运行代码(并提供一个按钮来在用户厌倦等待时终止进程)将是最直接的方法。

如果您只有一个进程并且在单独的线程中运行这段代码,那就不太好了。在没有线程合作的情况下,没有通用的安全方法来停止线程,除非您使用已弃用的停止方法。使用单独的进程将保持分离并限制用户程序可能对您的编辑器造成的损害。用户可以选择一个与您的编辑器用来运行的 JVM 不同的 JVM,并且您的类加载器与用户代码使用的类加载器保持分离。

为此,您需要使用 ProcessBuilder 创建一个新进程并运行它,确保您从其 stdout 和 stderr 流中读取数据。 (无论如何你都想这样做以向用户显示输出,但如果你让缓冲区填满,进程将挂起。)

关于java - 通过java中的反射调用具有无限循环的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com