2011-12-22 4 views
3

Eclipse에서 java로 코드를 작성하고 두 번째로 실행하면 첫 번째 프로세스가 여전히 실행 중입니다. 예를 들어, 일부 인쇄물과 함께 무한 루프를 작성하고 한 번 실행 한 다음 다시 실행하면 첫 번째와 두 번째 실행에서 모두 인쇄됩니다. 또한 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)을 만듭니다. Main에 Bomb 객체를 던지기 만하면 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

+0

예, JUnit은 훌륭합니다. – Indolering