2012-12-08 6 views
21

Nie jestem ekspertem od java ani ekspertem od zaćmień. Obecnie pracuję nad projektem i muszę często debugować/testować. Używam do tego przycisku uruchamiania Eclipse. Ale kiedy nie zamykam programu, eclipse/java otwiera go ponownie (drugie okno). Jest to aplikacja gui z jfame swing.Zatrzymaj środowisko Eclipse/Java z wieloma instancjami

Czy istnieje funkcja w środowisku Eclipse lub Java, aby zakończyć poprzednią kompilację i otwiera nową po uruchomieniu?

+2

Istnieje przycisk stop z czerwonym kwadratowy obrazu. Kliknij go, aby zatrzymać/zabić aplikację. –

+3

@LuiggiMendoza To zatrzymuje tylko bieżący proces. Musisz zakończyć proces java za pomocą menedżera zadań (przynajmniej tak to zawsze robiłem). Ale, szczerze mówiąc, po prostu dodaj do swojego okna moduł onclose: 'frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)' – Vulcan

+1

@Vulcan to działało dla mnie nawet z aplikacjami wielowątkowymi, które uruchamiam w środowisku Eclipse (działa nawet w celu zatrzymania/zabicia serwera aplikacji WWW). –

Odpowiedz

7

spróbować następujących sposobów:

  1. Jeśli jesteś w perspektywie debugowania, możesz kliknąć prawym przyciskiem uruchomione wystąpienie i kliknąć przycisk „Zakończ i Relaunch” (można powiązać skrót do tego z Window -> Preferences -> Ogólne -> Klucze) To dobrze się sprawdziło.

  2. This link mówi, że możesz powiązać "Terminate & Restaunch" w dowolnej prespective. Możesz spróbować, ale to samo dla mnie nie zadziałało.

  3. Użyj tej wtyczki https://bitbucket.org/mantis78/relaunch-plugin (Nie testowano).

+0

1) działa, ale niestety nie mogę ustawić tego samego klucza debugowania, aby zakończyć i ponownie uruchomić, wystarczy pamiętać, uderzyć w odpowiedni klawisz :(hehe, gdybyśmy mogli algorytmicznie zaćmiewać makro komendy, mogłoby to zadziałać, myślę, –

3

W czasie zaćmienia podczas uruchamiania/debugowania aplikacji tworzone jest nowe wystąpienie. Istnieją dwie opcje:

  1. Po uruchomieniu aplikacji otwiera się UI/wynik w konsoli. Dlatego musisz zatrzymać istniejącą aplikację, klikając jedną z nich: Console view

  2. W trybie debugowania musisz zrobić to samo. Debug view

Albo musisz sobie z tym poradzić w kodzie. Sprawdź ten wątek: How to restrict Eclipse-RCP application to a single instance?

Mam nadzieję, że jest to pomocne.

2

Wystarczy dodać kolejny najszybszy (dla mnie) rozwiązanie:

przed uruchomieniem, naciśnij ctrl-F2.

Ten skrót kończy aktualnie uruchomioną/debugowaną aplikację.

1

Uważam, że problem nie dotyczy zaćmienia, ale sposobu, w jaki wdrożyłeś aplikację. Aby uzyskać szczegółowe informacje, zapoznaj się z następującym adresem URL. Powyższe rozwiązania są ważne, jeśli Twoja aplikacja działa poza środowiskiem zaćmienia. Za każdym razem, gdy użytkownik uruchamia i zamyka twoją aplikację, zostanie uruchomiona nowa instancja jvm.

Exit on close button

-2

wystarczy nacisnąć przycisk stop. lub zamknij sesję przyciskiem zakończenia:

1

Naprawdę spóźnisz się na tę, ale hej, lepiej późno niż wcale. Użyj start() podczas inicjowania wszystkiego. Jeśli używasz ramki JFrame, użyj start (ramka Jframe), aby automatycznie obsługiwała program, gdy program jest zamykany ręcznie. Jeśli nie, zadzwoń na Close(), gdy program zostanie ręcznie zakończony, w przeciwnym razie nie rozpocznie się następnym razem.

package your.package; 

import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.io.File; 
import java.io.IOException; 

import javax.swing.JFrame; 

public class ReLaunch { 
    private static boolean relaunchClose = false; 
    private static File runCheck = new File("run.check"); 
    private static File deleteCheck = new File("delete.check"); 

    /** 
    * Use ReLaunch to stop multiple instances 
    */ 
    public static void start() { 
     //Check to see if application is already running 
     if(runCheck.exists()) { 
      //Mark a request to exit the existing application 
      try { deleteCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); } 
      //Wait until the existing application terminates itself 
      while(runCheck.exists()); 
      //Remove the delete request so current application doesn't terminate 
      if(deleteCheck.exists()) deleteCheck.delete(); 
     } 

     //Mark that this application is currently running 
     try { runCheck.createNewFile(); } catch (IOException e) { e.printStackTrace(); } 

     //Creates a new thread that checks if a new application is requesting to run 
     new Thread(new Runnable() { 
      public void run() { 
       //Wait until delete request shows up 
       while(!deleteCheck.exists()); 
       //Proof that the application is closed to be re-launched 
       relaunchClose = true; 
       //Unmarks this application as running 
       if(runCheck.exists()) runCheck.delete(); 
       //Terminated so new application can run 
       System.exit(0); 
      } 
     }).start(); 
    } 

    /** 
    * Same as start, but automatically handles when the frame is closed by the user by marking that no applications are running 
    * @param frame JFrame which needs to be closed 
    */ 
    public static void start(JFrame frame) { 
     start(); 
     //Listen for when the window is manually closed 
     frame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent event) { 
       onClose(); 
      } 
     }); 
    } 

    /** 
    * Marks this application as not running if it is exited manually 
    */ 
    public static void onClose() { 
     if(!relaunchClose) runCheck.delete(); 
    } 
} 
+0

Właściwie wolę twoje podejście do moich zastosowań, stworzyłem istotę [Highlander] (https://gist.github.com/hrgdavor/d81a231c274e225447117902a633bdb9) z tą samą logiką ale używając Port TCP (dodaje tylko 10-15 ms opóźnienia do aplikacji) Podoba mi się to, ponieważ po prostu wciskam klawisz F11 lub CTRL + F11, aby uruchomić najnowszą aplikację, przyzwyczaiłem się do tego tak bardzo z Run-Pierperem P lugin –

2

w Eclipse Neon iść do Window -> Preferences -> Run/Debug -> Launching i kontroli Launch Operation sekcji:

[X] Terminate and Relaunch while launching

Terminate and Relaunch while launching