2011-12-22 85 views
3

当我在Eclipse中用java编写代码并再次运行它时,第一个进程仍在运行。例如,当我用一些印刷品写一个无限循环时,一次又一次地运行它,这是从第一个和第二个的运行中进行印刷。另外,Eclipse正在变慢。有没有办法在重新运行时自动终止第一个进程?Eclipse:自动终止(java)

回答

3

您可以右键单击调试视图中的条目并选择“Terminate and Relaunch”,这是最接近我想要的,因为它会首先停止当前运行的实例,然后启动一个新的具有相同的设置。

除此之外,你可能会自己实现一些东西,例如实例侦听的套接字,以及新引擎在完全启动之前发送关机命令的位置。

+0

终止和重新启动是好的,我设置了一个捷径,它很好!谢谢。 – grxx 2011-12-22 22:43:42

2

好像你的程序没有退出。您可以使用控制台视图右上角的小红色方块退出该过程。

+0

谢谢。一些方法使其自动?我正在写一个没有退出的游戏循环。我认为在重新运行时会更舒服,我不必总是点击那个按钮。 – grxx 2011-12-22 21:46:13

+0

嗯没有什么,我知道的... – hage 2011-12-22 22:01:10

2

简短的回答:

转到窗口 - >显示视图 - >调试,选择你的程序,并终止它。

龙解释:

通过你的问题的描述,您可能正在使用的是使用线程框架(是否使用在游戏中的Swing?)。您也可以在调试视图中看到正在运行的线程。

在所有用户线程完成之前,JVM不会结束进程。

如果您正在使用Swing,则可以使用JFrame setDefaultCloseOperation来更改窗口关闭的默认行为。

或者您可以使用System.exit(0)终止JVM进程。

1

共识似乎是这是不可能的。从脚本背景来看,我习惯做大量的手动测试,而且我喜欢编译几乎每一个变化的程序。

下面的类(轰炸机)10分钟后使System.exit(0)。只需在Main中投掷炸弹对象,Bomber daBomb = new Bomber();并触发daBomb.reset();即可重置计时器。一旦进程在窗台上像苍蝇一样收集,您单击控制台选项卡中的双X(the "remove all terminated launches" button)可关闭所有死区进程的控制台。

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(); 
} 
+0

脚本背景和经常重新运行也是我的情况。有趣的解决方案。我会尽力。谢谢 – grxx 2012-03-18 15:38:49

+0

是的,JUnit是惊人的。 – Indolering 2012-03-19 03:53:08