2012-12-08 38 views
21

मैं जावा विशेषज्ञ या ग्रहण विशेषज्ञ नहीं हूं। वर्तमान में मैं एक परियोजना पर काम कर रहा हूं और मुझे अक्सर डीबग/परीक्षण करने की आवश्यकता है। मैं इसके लिए ग्रहण रन बटन का उपयोग करता हूं। लेकिन जब मैं प्रोग्राम ग्रहण/जावा को बंद नहीं करता हूं तो इसे फिर से खोलता है (दूसरी विंडो)। यह स्विंग jframe के साथ एक gui ऐप है।रोकें ग्रहण/जावा कई उदाहरण चला रहे हैं

क्या ग्रहण या जावा में पिछले निर्माण को समाप्त करने के लिए कोई कार्य है और इसे चलाने पर नया खुलता है?

+2

एक लाल चौक छवि के साथ बंद बटन नहीं है। एप्लिकेशन को रोकने/मारने के लिए उस पर क्लिक करें। –

+3

@ लुइगी मैन्डोज़ा जो केवल वर्तमान प्रक्रिया को रोकता है। आपको कार्य प्रबंधक के माध्यम से जावा प्रक्रिया को समाप्त करने की आवश्यकता है (कम से कम, इस तरह मैंने इसे हमेशा किया है)। लेकिन स्पष्ट रूप से, बस अपनी खिड़की पर एक संलग्नक जोड़ें: 'frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)' – Vulcan

+1

@ वल्कन ने मेरे लिए एक्लिप्स पर चलने वाले बहु थ्रेडेड अनुप्रयोगों के साथ भी काम किया (यह वेब अनुप्रयोग सर्वर को रोकने/मारने के लिए भी काम करता है)। –

उत्तर

7

निम्न तरीकों का प्रयास करें:

  1. आप डिबग परिप्रेक्ष्य में हैं, तो आप सही उदाहरण चल क्लिक करें और "बर्खास्त और पुन: लॉन्च" क्लिक कर सकते हैं (आप विंडो से इस के लिए कम-कट बाध्य कर सकते हैं -> प्राथमिकताएं -> सामान्य -> ​​कुंजी) यह मेरे लिए अच्छा काम करता है।

  2. This link का कहना है कि आप किसी भी परिप्रेक्ष्य में "& रिलांच" को बाध्य कर सकते हैं। आप इसे आज़मा सकते हैं लेकिन यह मेरे लिए काम नहीं करता है।

  3. इस प्लगइन का उपयोग करें https://bitbucket.org/mantis78/relaunch-plugin (कोशिश नहीं की गई)।

+0

1) काम करता है लेकिन दुर्भाग्यवश मैं एक ही डीबग कुंजी को समाप्त और पुनः लॉन्च करने के लिए सेट नहीं कर सकता, बस सही कुंजी को याद रखना होगा :(हे, अगर हम एल्गोरिदमिक रूप से मैक्रो ग्रहण आदेशों को काम कर सकते हैं तो यह काम कर सकता है, मुझे लगता है कि –

3

ग्रहण में जब आप किसी एप्लिकेशन को चला/डीबग करते हैं तो एक नया उदाहरण बनाया जाता है। वहाँ दो विकल्प हैं:

  1. यह कंसोल में यूआई/परिणाम को खोलता है जब आप एक आवेदन चलाते हैं। इसलिए आपको इनमें से किसी एक पर क्लिक करके मौजूदा एप्लिकेशन को रोकना होगा: Console view

  2. डीबग मोड में आपको ऐसा करना होगा। Debug view

अन्यथा आपको कोड में इसे संभालना होगा। इस धागे को जांचें: How to restrict Eclipse-RCP application to a single instance?

आशा है कि यह सहायक होगा। शुरू करने, प्रेस ctrl-F2 से पहले

:

2

बस (मेरे लिए) समाधान एक और, सबसे तेजी से जोड़ने के लिए।

यह शॉर्टकट वर्तमान में चल रहे/डीबग किए गए एप्लिकेशन को समाप्त करता है।

1

मुझे लगता है कि यह मुद्दा ग्रहण के साथ नहीं है बल्कि जिस तरह से आपने अपना आवेदन लागू किया है। विवरण के लिए कृपया निम्नलिखित यूआरएल देखें। यदि आपका ऐप ग्रहण के बाहर चलाया गया है तो उपरोक्त समाधान वैध समस्याग्रस्त होंगे। जैसे ही कोई उपयोगकर्ता आपके ऐप को लॉन्च और बंद करता है, एक नया जेवीएम इंस्टेंस लॉन्च किया जाएगा।

Exit on close button

-2

बस स्टॉप बटन दबाएँ। या बाहर निकलें बटन

1

वास्तव में इस पर देर से, लेकिन हे, कभी भी देर से बेहतर देर से सत्र बंद करें। सब कुछ शुरू करते समय प्रारंभ() का उपयोग करें। यदि आप जेएफआरएएम का उपयोग कर रहे हैं, तो स्टार्ट (जेफ्रेम फ्रेम) का उपयोग करें ताकि जब प्रोग्राम मैन्युअल रूप से बंद हो जाए तो यह स्वचालित रूप से संभालता है। यदि आप नहीं हैं, तो जब आप प्रोग्राम प्रोग्राम मैन्युअल रूप से बाहर निकलते हैं तो ऑनक्लोज़() पर कॉल करें अन्यथा यह अगली बार शुरू नहीं होगा।

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

मैं वास्तव में अपने उपयोग के लिए अपना दृष्टिकोण पसंद करता हूं, मैंने एक तर्क [हाइलैंडर] (https://gist.github.com/hrgdavor/d81a231c274e225447117902a633bdb9) एक ही तर्क के साथ बनाया है लेकिन उपयोग कर रहा है टीसीपी पोर्ट (यह ऐप में केवल 10-15 एमएस देरी जोड़ता है)। मुझे यह पसंद है क्योंकि मैं नवीनतम ऐप चलाने के लिए केवल एफ 11 या सीटीआरएल + एफ 11 दबाता हूं। मैंने इसे रन-जेटटी पी के साथ बहुत कुछ उपयोग किया है। lugin –

2

ग्रहण नियॉन में Window -> Preferences -> Run/Debug -> Launching करने के लिए और में Launch Operation अनुभाग की जांच जाना:

[X] Terminate and Relaunch while launching

Terminate and Relaunch while launching