मेरे दृश्य में एक छवि प्रदर्शित करने वाला केवल ImageView है। मैं छवि को काला (दृश्य के असाइन किए गए रंग) में फीका करना चाहता हूं, फिर कुछ समय बाद, काले से छवि में फिर से फीका। मुझे FadeTransition इस उद्देश्य के लिए बहुत उपयुक्त पाया गया। यह मेरा कोड का एक टुकड़ा है:javafx 2.1 में समाप्त होने के लिए संक्रमण की प्रतीक्षा कैसे करें?
// fade to black transition
FadeTransition ft1 = new FadeTransition(Duration.millis(2000), myImageView);
ft1.setFromValue(1.0);
ft1.setToValue(0.0);
ft1.play();
// fade from black transition
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), myImageView);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
मेरे समस्या यह है कि ft1.play()
तो नीचे दिए गए कोड निष्पादित किया जा रहा शुरू कर देंगे से पहले ft1.play()
से बाहर निकल गया है, अतुल्यकालिक है। नतीजतन मैं केवल दूसरा संक्रमण देखता हूं। मैं पहले संक्रमण को समाप्त करने के लिए और फिर दूसरा संक्रमण लॉन्च करने का इंतजार कैसे कर सकता हूं? मैं धागे को बीच में सो नहीं सकता क्योंकि यह मुख्य जावाफक्स धागा है (कोशिश की और काम नहीं किया)।
मैंने ध्वज पर व्यस्त प्रतीक्षा के संयोजन के साथ ऑनफिनिशप्रॉपर्टी() विधि का उपयोग करने की कोशिश की, लेकिन मैं हमेशा के लिए लूप में फंस गया। इसके लिए मेरा कोड यहां दिया गया है:
boolean isTransitionPlaying;
FadeTransition ft = new FadeTransition(Duration.millis(2000), iv);
ft.setFromValue(1.0);
ft.setToValue(0.0);
ft.onFinishedProperty().set(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
transitionPlaying = false;
}
});
transitionPlaying = true;
ft.play();
while (transitionPlaying == true)
{
// busy wait
System.out.println("still waiting...");
}
FadeTransition ft2 = new FadeTransition(Duration.millis(2000), iv);
ft2.setFromValue(0.0);
ft2.setToValue(1.0);
ft2.play();
ठीक से इंतजार कैसे किया जा रहा है? आप
मुझे लगता है कि मैं सोच रहा था कि संक्रमण के बाद() असीमित हैं, वे जावाफैक्स एप्लिकेशन थ्रेड के बाद किसी अन्य थ्रेड पर होते हैं। यही कारण है कि मैंने सोचा कि मैं मुख्य धागा संक्रमण को अपनी चीज खत्म करने के लिए इंतजार कर सकता हूं और फिर फिर से शुरू कर सकता हूं। अब मैं देखता हूं कि यदि आवेदन धागा सो रहा है, तो संक्रमण भी संसाधित नहीं किया जा सकता है, है ना? तो मुझे लगता है कि अनुक्रमिक ट्रांजिशन मेरे मामले के लिए सबसे स्पष्ट समाधान है। आप और Ukuk दोनों के लिए धन्यवाद। – dadox