JavaFX

2013-06-15 12 views
5

में एक आवेदन को पुनः आरंभ मैं बंद करने के लिए और फिर एक पहले से चल रहा अनुप्रयोग फिर से आरंभ (स्वतः) है कि मैं, जिससे हूँ एक बटन या ऐसा ही कुछ क्लिक करके चाहते हैं, मुझे लगता है कि के प्रयोजन के लिए आवेदन फिर से शुरू करने में करना चाहते हैं एक अन्य भाषा में, मैं सामान्य रूप से जावाएफएक्स और जावा में नया हूं, कृपया क्या आप मुझे इस समस्या का समाधान दे सकते हैं?JavaFX

+1

हाँ आपका प्रश्न इसके बारे में है। लेकिन भाषा बदलने के लिए आपको ऐप को पुनरारंभ करने की आवश्यकता क्यों है? शायद इसे फिर से लॉन्च किए बिना बदला जा सकता है? आपके ऐप की भाषा कॉन्फ़िगरेशन क्या है? –

+0

खैर मैं इन तंत्रों के बारे में ज्यादा पता नहीं है, क्या मैं चाहता हूँ करने के लिए [JavaFX 2 और अंतर्राष्ट्रीयकरण] (http://stackoverflow.com सभी वस्तुओं/में अन्य भाषा – AymenDaoudi

+0

चेक @ UlukBiy के समाधान नियंत्रण को फिर से परिभाषित करने के लिए एप्लिकेशन को पुन: लॉन्च है/प्रश्न/10143392/javafx-2-और-अंतर्राष्ट्रीयकरण) प्रश्न। – tarrsalah

उत्तर

7

इस प्रश्न में विवरण की कमी है। आपने जावाएफएक्स एप्लिकेशन का जिक्र किया है लेकिन यह जानना महत्वपूर्ण है कि यह एप्लिकेशन कैसे तैनात किया जा रहा है। क्या यह वेब ब्राउज़र में चल रहा है, जावा वेबस्टार्ट एप्लिकेशन के रूप में, एक स्टैंड-अलोन जार, या स्वयं निहित मूल अनुप्रयोग? आप कैसे शुरू करने के लिए आवेदन शुरू कर रहे हैं? इन सवालों के जवाब देने से विशिष्टता के साथ आपके प्रश्न का उत्तर देना आसान हो जाएगा।

जबकि निम्न उदाहरण JavaFX, यहां इस्तेमाल किया तरीकों से एक JavaFX आवेदन तैनात किया जा सकता से कुछ के लिए काम करेंगे दृष्टिकोण नहीं है। एक एप्लिकेशन को पुनरारंभ करने के लिए एक दृष्टिकोण जो अच्छी तरह से काम करता है वह एप्लिकेशन को स्क्रिप्ट से शुरू करना है। स्क्रिप्ट के अंदर एक समय लूप होगा जो कार्यक्रम से बाहर निकलने वाले कोड के आधार पर लगातार प्रोग्राम को पुनरारंभ करेगा।

while true ; do 
    eval "$JDK/bin/java" $ALL_JVM_ARGS -Djb.restart.code=88 $MAIN_CLASS_NAME $* 
    test $? -ne 88 && break 
done 

इस उदाहरण में, स्टार्टअप स्क्रिप्ट "jb.restart.code" गुजर रहा है एक आवेदन पैरामीटर के रूप में: यह एक bash खोल स्क्रिप्ट जो एक लिनक्स मंच पर इंटेलीजे शुरू होता है के लिए एक उदाहरण है। यदि IntelliJ पुनरारंभ करना चाहता है, तो वह उस मान 88 को निकास कोड के रूप में वापस कर देगा। स्क्रिप्ट आवेदन बाहर निकलने के कोड का अवलोकन करता है, और आवेदन पुन: प्रारंभ होता है, तो मूल्य 88.

यह तरीका सबसे प्लेटफार्मों पर अच्छी तरह से काम है, लेकिन आवेदन एक स्क्रिप्ट के माध्यम से शुरू किया जा करने के लिए की आवश्यकता है।

+0

देशी स्व-निहित एप्लिकेशन के बारे में क्या? –

+0

यदि यह एक देशी स्व-निहित अनुप्रयोग है, तो कौन सा ओएस मूल है?ये विवरण उत्तर में क्या अंतर आएंगे में अंतर डालते हैं। – axiopisty

+0

वर्तमान में मैंने System.exit() के बाद exec के माध्यम से विंडोज समाधान लागू किया। मुझे लगता है कि लिनक्स और मैकोज़ सापेक्ष खोल कमांड के साथ एक ही पथ का पालन करेंगे। –

2

एक समाधान अपने main() प्रणाली अपना आरंभ लिपि में कमांडलाइन और काम dir पारित करने के लिए है। ProcessBuilder का उपयोग करके आप फिर से उपकरण को पुनरारंभ कर सकते हैं। एक और संभावना है कि पूरे एप्लिकेशन को एक कस्टम क्लासलोडर में शुरू करना है (उदाहरण के लिए स्प्रिंग प्रोजेक्ट के पास उनके स्रोत बेस में उपयुक्त क्लासलोडर हैं), फिर आप मूल रूप से अपने मुख्य को ऑउथर क्लासलोडर में शुरू करके पुनरारंभ कर सकते हैं, फिर आपको थ्रेड और संसाधनों के लिए उचित हाउसकीपिंग की आवश्यकता है पहला उदाहरण

+0

ठीक है, मैं वास्तव में बहुत ही इस के लिए नया हूँ, और मैं थोड़े संदेह में हूँ और आपका उत्तर नहीं मिल रहा है, क्या आप कृपया मुझे कुछ कोड दिखा सकते हैं जो उस लेख को समझने या संदर्भित करने के लिए संदर्भ दे सकता है, thx – AymenDaoudi

+0

वास्तव में क्लासलोडर चीज़ बहुत जटिल है, कमांड लाइन दृष्टिकोण को बेहतर तरीके से प्रयास करें। आप जावा से एक ओएस प्रक्रिया शुरू कर सकते हैं, इसलिए आपको यह जानना है कि जावा निष्पादन योग्य कहां स्थित है और क्लासपाथ कैसे सेट किया गया है। आप System.getProperty ("java.class.path") या इसी तरह के क्लासपाथ के बारे में पा सकते हैं। Java.exe का स्थान आपको स्टार्टअप समय पर अपने एप्लिकेशन को पास करना होगा। Runtime.getRuntime() का उपयोग करना। Exec (..) या बस ProcessBuilder आपको अपने एप्लिकेशन की पूरी प्रतिलिपि शुरू करने देगा। –

+0

मैं कोशिश करूँगा और देख सकता हूं, आपकी सहायता के लिए thx – AymenDaoudi

1
retstart.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent t) { 
      if(getOnCloseRequest()!=null){ 
       getOnCloseRequest().handle(new WindowEvent(getScene().getWindow(), WindowEvent.WINDOW_CLOSE_REQUEST)); 
//write code to invoke application instance again 
      }else{ 
       close(); 
      } 

     } 
    }); 

 संबंधित मुद्दे