当我在Eclipse中用java编写代码并第二次运行时,第一个进程仍在运行。例如,当我用一些打印件写一个无限循环时,运行它一次然后再次运行它从第一个和第二个运行。另外,Eclipse变慢了。有没有办法在重新运行时自动终止第一个进程?
答案 0 :(得分:3)
您可以右键单击Debug-View中的条目,然后选择“Terminate and Reunchunch”,这是我最接近你想要的东西,因为它将首先停止当前正在运行的实例,然后开始一个新的一个具有相同的设置。
除此之外,你可能会自己实现一些东西,即实例侦听的套接字以及新代码在完全启动之前发送shutdown命令的位置。
答案 1 :(得分:2)
好像你的程序没有退出。您可以使用控制台视图右上角的小红色方框退出该过程。
答案 2 :(得分:2)
简答:
转到窗口 - >显示视图 - >调试,选择你的程序并终止它。
长解释:
根据你的问题的描述,你可能正在使用一个使用线程的框架(你在游戏中使用Swing吗?)。您还可以在调试视图中查看正在运行的线程。
在完成所有用户线程之前,JVM不会结束该过程。
如果您使用Swing,可以使用JFrame setDefaultCloseOperation更改Window关闭的默认行为。
或者您可以使用System.exit(0)终止JVM进程。
答案 3 :(得分:1)
共识似乎是这是不可能的。来自脚本背景,我习惯于进行大量的手动测试,我喜欢用几乎所有的变化来编译程序。
以下类(Bomber)在10分钟后生成System.exit(0)。只需在Main,Bomber daBomb = new Bomber();
中抛出Bomb对象并触发daBomb.reset();
即可重置计时器。一旦进程像窗台上的苍蝇一样收集,您可以单击控制台选项卡栏中的双X()来关闭所有死进程的控制台。
public class Bomber {
Bomb bomb = new Bomb();
public Bomber() throws InterruptedException {
Thread thread = new Thread(bomb);
thread.start();
}
public void reset() {
bomb.reset();
}
//kill because someone cut the redwire!
public void redWire() {
bomb.timer = 1000;
}
//Defuses bomb
public void greenWire() {
reset();
bomb.greenWire=false;
}
public class Bomb implements Runnable {
public int timer;
public boolean greenWire;
public Bomb() {
reset();
greenWire=true;
}
public void run() {
try {
while (timer > 1) {
Thread.sleep(1000L);
timer = timer - 1000;
//System.out.println(timer);
}
if (greenWire) {
System.exit(0); // kill, because no-one cut the green wire.
}
} catch (InterruptedException iex) {
}
}
public void reset() {
timer = 3000000; // five minutes
// timer = 5000; // Five seconds
}
}
}
您希望如何精心整合轰炸机功能取决于您。我为Main创建了一个函数。请注意,以下内容可能无法正常工作,因为我刚刚删除了一堆非核心代码,并且没有进行测试以确保它仍然有效。
public static void startUp() throws InterruptedException {
Bomber daBomb = new Bomber();
String input = "";
Interpreter console = new Interpreter();
while (!input.equalsIgnoreCase("quit")) {
daBomb.reset();
input = terminal.next().toLowerCase();
}
daBomb.redWire();
}