2013-02-26 14 views
5

मुझे अपने एप्लिकेशन में छवियों को लोड करने में समस्या है। मैं एक साधारण छवि ब्राउज़र बनाने की कोशिश कर रहा हूँ। बाईं तरफ मुझे फ़ोल्डर्स की एक सूची मिली है। सूची छवियों पर फ़ोल्डर के नाम पर क्लिक करने के बाद दाएं (प्रवाह फलक) पर दिखाई देना चाहिए। प्रत्येक छवि एक सीमा के साथ एक HBox में है। लेकिन मैं इस जल्दी की तरह त्रुटि हो रही है:जावाएफएक्स - छवियों और मेमोरी समस्याओं को लोड करना

java.lang.outofmemoryerror java heap space 

मैं कार्य प्रबंधक पर देखा - अगर मैं केवल 6 तस्वीरें लोड एप्लिकेशन स्मृति के 500MB ले जाता है! और एक और बात - अगर मैं सूची में फ़ोल्डर बदलता हूं तो स्मृति बनी रहती है। जबकि अन्य फ़ोल्डर मैं नए flowPane

flowPane = new FlowPane(); 

तो सब ImageViews के साथ पुराने एक कचरा कलेक्टर द्वारा हटा दिया जाना चाहिए, सही बना रहा हूं चुनने?

मैं अपने ऐप में छवियों को प्रभावी ढंग से कैसे प्रबंधित कर सकता हूं?

for(int i = 0 ; i < zdjecia.length; i++){ 
     ImageView iv2 = new ImageView(); 
     Image image = new Image("file:"+zdjecia[i].getAbsolutePath()); 
     iv2.setImage(image); 
     if(image.getHeight() > image.getWidth()){ 
       iv2.fitHeightProperty().bind(szerokoscZdjecia.multiply(0.8).subtract(6)); 
     }else 
       iv2.fitWidthProperty().bind(szerokoscZdjecia.subtract(6)); 

     iv2.setPreserveRatio(true); 
     iv2.setSmooth(true); 
     iv2.setCache(false); 

     String styl = "-fx-border-color: #b2b3b3;" 
       + "-fx-border-width: 2;"; 

     HBox boxNaFotke = new HBox(); 
     boxNaFotke.prefWidthProperty().bind(szerokoscZdjecia); 
     boxNaFotke.prefHeightProperty().bind(szerokoscZdjecia.multiply(0.8)); 
     boxNaFotke.setAlignment(Pos.CENTER); 
     boxNaFotke.setStyle(styl); 
     boxNaFotke.getChildren().add(iv2); 
     fotki.add(boxNaFotke); 
     flowPane.getChildren().add(boxNaFotke); 
    } 
+0

मैं एक ही समस्या है :( – Xdg

उत्तर

0

मुझे जावाएफएक्स में स्मृति के साथ समान समस्या है लेकिन सेट स्टाइल विधि से जुड़ा हुआ है। मैंने ढेर उपयोग का विश्लेषण किया है और मैंने पाया है कि StyleHelper ऑब्जेक्ट सेट स्टाइल विधि द्वारा निर्धारित सभी शैलियों के सभी संदर्भ रखता है (com.sun.javafx.css.StyleManager $ धारक में जीसी रूट के साथ हैश मैप उदाहरणों के बहुत सारे)। यह एक मुद्दा हो सकता है जब शैली अक्सर बदल जाती है।

बॉक्सNaFotke.setStyle (स्टाइल) पर टिप्पणी करने का प्रयास करें; लाइन और जांचें कि क्या यह मदद करता है।

3

यदि आप constructor का उपयोग कर Image को स्केल करते हैं, तो आवश्यक स्मृति की मात्रा नाटकीय रूप से कम हो जाएगी।

दस्तावेज़ से कुछ उदाहरण:

// एक छवि को लोड और अपने मूल पहलू अनुपात के संरक्षण के बिना 100x150 करने के लिए इसे दोबारा आकार
// छवि classpath की my.res पैकेज में स्थित है
Image image2 = new Image("my/res/flower.png", 100, 150, false, false);

// एक छवि लोड और 100 की चौड़ाई के उसका आकार बदलने जबकि इसके
// मूल पहलू अनुपात के संरक्षण, तेजी से छानने metho का उपयोग कर घ
// छवि http प्रोटोकॉल के माध्यम से आपूर्ति URL से डाउनलोड किया जाता है
Image image3 = new Image("http://sample.com/res/flower.png", 100, 0, false, false);

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