मैं सिर्फ वास्तव में ऐसा करने के लिए एक आसान, तार्किक ढंग से खोजने की कोशिश कर रहा था । मैंने नहीं किया यदि कोई अनुप्रयोग था .getApplicationFor (AppClass.class) जो आपके लिए कुछ सिंगलेट प्रबंधित करता है - लेकिन नहीं।
यदि हम समस्या स्थान को प्रतिबंधित करते हैं तो इसे हल करना बहुत आसान है। हम कक्षा एक सिंगलटन बनाने हैं, तो यह केक है ... एक सरलीकृत सिंगलटन पैटर्न ठीक काम करना चाहिए:
class MyApp extends Application
{
public static MyApp me;
public MyApp()
{
me=this;
}
...
}
मुझे अशक्त हो सकता है अगर यह अभी तक प्रणाली द्वारा instantiated नहीं किया गया है। अधिक कोड के साथ इसके खिलाफ रक्षा करना संभव होगा।
... कोड को लागू करने ...
बस कार्यान्वित इस - (किसी भी अजीब सूत्रण स्थितियों को छोड़कर) काम करने के लिए मैं एक अलग स्थिति, मैं एक मौजूदा स्विंग में एक JavaFX स्क्रीन wedging कर रहा हूँ है लगता है जीयूआई। यह ठीक काम करता है, लेकिन मुझे यह सुनिश्चित करने की ज़रूरत है कि एप्लिकेशन.लांच केवल एक बार बुलाया जाता है। इस आवश्यकता को जोड़ा जा रहा है, मेरा अंतिम समाधान इस प्रकार है:
(क्षमा करें, लेकिन वाक्य रचना उस में ग्रूवी कुछ, आसान किसी भी जावा उपयोगकर्ता का अनुवाद करने के लिए किया जाना चाहिए है)
class MyClass extends Application{
private static MyClass instance
public MyClass() {
instance=this
}
public synchronized static getInstance() {
if(!instance) {
Thread.start {
// Have to run in a thread because launch doesn't return
Application.launch(MyClass.class)
}
while(!instance)
Thread.sleep(100)
}
return instance
...
} // class
इस का प्रबंधन करता है अवरुद्ध जब तक Application.launch है कक्षा को तत्काल पूरा करना, अन्य स्थानों से उदाहरण प्राप्त करना और यह सुनिश्चित करना कि एप्लिकेशन.लांच को एक बार जब तक कम से कम एक बार कहा जाता है, तब तक कॉल किया जाता है।
स्रोत
2016-10-13 20:10:36
क्या आपने इसे Google किया था? http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html – Dici
@Dici आपका क्या मतलब है? – user2997204
आपको जो कुछ भी चाहिए वह डॉक्टर में है। आपकी मुख्य कक्षा को केवल 'एप्लिकेशन' का विस्तार करने की आवश्यकता है और फिर आपकी मुख्य विधि केवल 'लॉन्च' विधि को कॉल करेगी। असल में, जावाएफएक्स एप्लिकेशन – Dici