2012-12-08 39 views
21

Tôi không phải là chuyên gia java hay chuyên gia nhật thực. Hiện tại tôi đang làm việc trên một dự án và tôi cần gỡ lỗi/kiểm tra thường xuyên. Tôi sử dụng nút chạy nhật thực cho nó. Nhưng khi tôi không đóng chương trình eclipse/java sẽ mở lại nó (cửa sổ thứ hai). Đó là một ứng dụng gui với jframe swing.Dừng Eclipse/Java chạy nhiều phiên bản

Có chức năng nào trong nhật thực hoặc java để chấm dứt bản dựng trước đó và mở bản mới khi bạn chạy nó?

+2

Có nút dừng với một hình ảnh hình vuông màu đỏ. Nhấp vào nó để dừng/giết ứng dụng. –

+3

@LuiggiMendoza Điều đó chỉ dừng quy trình hiện tại. Bạn cần phải chấm dứt quá trình java thông qua trình quản lý tác vụ (ít nhất, đây là cách tôi đã luôn luôn thực hiện nó). Nhưng thẳng thắn, chỉ cần thêm một onclose vào cửa sổ của bạn: 'frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)' – Vulcan

+1

@Vulcan nó làm việc cho tôi ngay cả với các ứng dụng đa luồng mà tôi chạy trên Eclipse (nó thậm chí hoạt động để dừng/diệt máy chủ ứng dụng web)). –

Trả lời

7

Hãy thử những cách sau đây:

  1. Nếu bạn đang ở trong phối cảnh gỡ rối, bạn có thể nhấp phải chạy dụ và bấm vào nút "Chấm dứt và Khởi chạy lại" (Bạn có thể ràng buộc short-cut cho điều này từ Window -> Preferences -> General -> Keys) Điều này làm việc tốt cho tôi.

  2. This link cho biết bạn có thể liên kết "Chấm dứt & Khởi chạy lại" trong bất kỳ viễn cảnh nào. Bạn có thể thử, nhưng điều đó cũng không hiệu quả với tôi.

  3. Sử dụng plugin này https://bitbucket.org/mantis78/relaunch-plugin (Không cố gắng).

+0

1) hoạt động nhưng tiếc là tôi không thể thiết lập cùng một khóa gỡ lỗi để chấm dứt và khởi chạy lại, chỉ cần nhớ nhấn phím phải: (hehe, nếu chúng ta có thể thực hiện thuật toán macro các lệnh eclipse nó có thể làm việc tôi nghĩ rằng –

3

Trong nhật thực khi bạn Chạy/Gỡ lỗi ứng dụng, một cá thể mới được tạo. Có hai tùy chọn:

  1. Khi bạn chạy một ứng dụng, nó sẽ mở giao diện người dùng/kết quả trong bảng điều khiển. Do đó, bạn phải dừng ứng dụng hiện có bằng cách nhấp vào một trong các tùy chọn sau: Console view

  2. Trong chế độ gỡ lỗi, bạn phải thực hiện tương tự. Debug view

Hoặc nếu không bạn phải xử lý mã này. Kiểm tra chủ đề này: How to restrict Eclipse-RCP application to a single instance?

Hy vọng điều này hữu ích.

2

Chỉ cần thêm giải pháp khác, nhanh nhất (đối với tôi):

trước khi khởi chạy, nhấn ctrl-F2.

Phím tắt này chấm dứt ứng dụng hiện đang chạy/gỡ lỗi.

1

Tôi cảm thấy vấn đề không phải với nhật thực nhưng cách bạn đã triển khai ứng dụng của mình. Vui lòng tham khảo url sau để biết chi tiết. Các giải pháp trên mặc dù hợp lệ sẽ có vấn đề nếu ứng dụng của bạn chạy bên ngoài nhật thực. Mỗi khi người dùng khởi chạy và đóng ứng dụng, một phiên bản jvm mới sẽ được khởi chạy.

Exit on close button

-2

chỉ cần nhấn nút dừng. hoặc đóng phiên bằng nút thoát

1

Thực sự muộn vào ngày này, nhưng hey, tốt hơn muộn hơn bao giờ hết. Sử dụng start() khi khởi tạo mọi thứ. Nếu bạn đang sử dụng JFrame, hãy sử dụng bắt đầu (khung Jframe) để nó tự động xử lý khi chương trình gần bằng tay. Nếu bạn không, hãy gọi onClose() khi chương trình của bạn được thoát thủ công nếu không chương trình sẽ không bắt đầu vào lần tiếp theo.

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

Tôi thực sự thích cách tiếp cận của bạn cho usecases của tôi, tôi đã tạo ra một gist [Highlander] (https://gist.github.com/hrgdavor/d81a231c274e225447117902a633bdb9) với cùng một logic nhưng sử dụng Cổng TCP (nó chỉ thêm 10-15 giây chậm trễ cho một ứng dụng) .Tôi thích điều này bởi vì tôi chỉ cần nhấn F11 hoặc CTRL + F11 để chạy ứng dụng mới nhất.Tôi đã quen với nó rất nhiều với run-jetty p lugin –

2

Trong Eclipse Neon đi Window -> Preferences -> Run/Debug -> Launching và trên séc Launch Operation phần:

[X] Terminate and Relaunch while launching

Terminate and Relaunch while launching

Các vấn đề liên quan