2011-12-22 17 views
3

EclipseでJavaでコードを記述して2回目に実行すると、最初のプロセスはまだ実行されています。たとえば、いくつかのプリントを含む無限ループを作成し、それを1回実行してからもう一度実行すると、1回目と2回目の両方から実行中であることが表示されます。さらに、Eclipseは遅くなっています。再実行時に最初のプロセスを自動的に終了する方法はありますか?Eclipse:自動終了(java)

答えて

3

デバッグビュー内のエントリを右クリックして、「実行中のインスタンスを停止してから、最初に実行したいと思っているものに最も近い」「終了と再起動」を選択できます。同じ設定の新しいもの

これ以外のものは、インスタンスがリッスンするソケットと完全に起動する前にシャットダウンコマンドを送信するソケットなど、自分自身で実装することをお勧めします。

+0

Terminate and Relaunchは良いです、私はショートカットを設定して、それは問題ありません!ありがとうございました。 – grxx

2

プログラムが終了しないようです。コンソールビューの右上隅にある小さな赤い四角でプロセスを終了することができます。

+0

ありがとうございました。自動的にするいくつかの方法?私はこれまでのところ出口を使わずにゲームループを書いています。私はそれが再実行で起こると、それがより快適になると思うし、いつもそのボタンをクリックする必要はありません。 – grxx

+0

私が知っていることは何もありません... – hage

2

短い答え:

ゴーウィンドウへ - >ビューの表示 - >デバッグ、あなたのプログラムを選択し、それを終了します。

ロング説明:あなたの問題の説明により、

、あなたはおそらくスレッドを使用するフレームワークを使用している(あなたがゲーム内のスイングを使用していますか?)。実行中のスレッドは、デバッグビューで表示することもできます。

JVMは、すべてのユーザースレッドが終了するまでプロセスを終了しません。

スウィングを使用している場合は、JFrame setDefaultCloseOperationを使用して、ウィンドウのデフォルトの動作を変更できます。

また、System.exit(0)を使用してJVMプロセスを終了することもできます。

1

これは合理的ではないようです。スクリプトの背景から来て、私は多くの手動テストをするのに慣れていて、ほぼすべての変更でプログラムをコンパイルするのが好きです。

次のクラス(Bomber)は、10分後にSystem.exit(0)を作成します。メインにBomber daBomb = new Bomber();のBombオブジェクトを投げ、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

+0

ええ、JUnitは素晴らしいです。 – Indolering

関連する問題