【发布时间】:2011-08-22 19:37:34
【问题描述】:
我有一个程序,我将用户键入的 java 代码编译到文本字段中,然后运行它。 A 在单独的线程中运行代码,这样他们用来输入源代码的 GUI 就不会被锁定。
GUI 有一个应该停止线程的中止按钮。我的问题是,无论编译线程内部发生什么,我都需要停止编译线程,这意味着我必须考虑线程陷入无限循环(由于用户错误)并且无法正确结束的情况本身使用安全标志。我已经阅读了许多涉及使用某种标志的解决方案,但由于这个循环问题,我无法使用它们。我需要停止线程并释放它正在使用的内存(我不能让它永远坐在后台,除非那是唯一剩下的解决方案)。有什么建议或替代解决方案吗?希望一些新的观点可以帮助解决这个问题。
编辑:
这是用户提交的代码示例:
public class RunMe extends SomethingThatRuns {
public void run() {
int i = 0;
while (i = 0) {
//Prepare to get stuck!
}
}
}
我将编译这个类,然后运行它。这就是它会卡住的地方,run() 方法永远无法完成,甚至循环检查标志。
【问题讨论】:
-
我觉得你需要有自己的接口来实现它们。正确的方法是使用
Thread.interrupt(),但如果代码不尊重该标志,那么您将陷入循环。我想知道其他人是怎么想的?我很乐意提供一个示例界面。 -
你必须使用线程吗?您可以在单独的过程中进行编译吗?然后如果运行时间过长,你可以
kill这个进程。 -
你为什么不发布一些代码?这将使我们更容易排除故障。
-
是否可以在调试器中运行代码?这可能会提供随时中断它的选项..
标签: java multithreading swing