2010-01-05 24 views
7

मेरे पास एक ऐसा एप्लिकेशन है जो लगातार सॉकेट पर डेटा प्राप्त करता है, और तब इस डेटा को एक फ़ाइल में लॉग करता है जबकि यह डेटा JTextPane में प्रदर्शित करता है। स्वाभाविक रूप से, जैसा कि डेटा JTextPane के अंतर्निहित दस्तावेज़ में लिखा गया है, स्मृति उपयोग में वृद्धि जारी है।सीमा JTextPane स्मृति उपयोग

क्या स्मृति को सीमित करने का एक आसान तरीका है जिसे JTextPane का उपयोग करने की अनुमति है? मैं JTextPane को एक सामान्य कमांड शैल के कमांड इतिहास के काम करने के समान काम करना चाहता हूं।

उत्तर

7

केवल सामग्री की जाँच करें और एक अधिकतम बफर आकार के हिसाब से यह पोंछ .. क्योंकि यह एक JTextPane आप textpane द्वारा इस्तेमाल किया दस्तावेज़ वर्ग पर काम करेगा है:

void clampBuffer(int incomingDataSize) 
{ 
    Document doc = textPane.getStyledDocument(); 
    int overLength = doc.getLength() + incomingDataSize - BUFFER_SIZE; 

    if (overLength > 0) 
    { 
     doc.remove(0, over_length); 
    } 
} 

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

बीटीडब्ल्यू अगर आप JTextPane की समृद्ध संपादक क्षमताओं का उपयोग नहीं कर रहे हैं तो मैं आपको JTextArea का उपयोग करने का सुझाव देता हूं जो कि बहुत अधिक है।

+0

यह काम नहीं करता है, आपको लगता है कि यह ऐसा करता है, लेकिन ऐसा नहीं है, और मेरे पास एक ऐप में एक ही समस्या है। एक JTextPane की कल्पना करें और आप लगातार स्रोत से लाइन जोड़ रहे हैं, यदि लाइन नंबर 100 से अधिक है, तो लाइन 0 हटाएं, फिर नई लाइन जोड़ें। यह मेमोरी उपयोग को लगभग उसी स्तर पर रखना चाहिए, है ना? गलत ... समय के साथ मेरा जावा ऐप विस्फोट हो गया और 170 एमबी मेमोरी उपयोग के रूप में पहले से ही एक घंटे के बाद, छोटे पाठ की केवल 100 पंक्तियों के साथ। मुझे बिल्कुल नहीं पता कि क्यों, या इसे कैसे ठीक किया जाए ... –

0

नहीं, आपको पाठ जोड़ने के रूप में वर्णों को गिनना होगा, और जब आपको लगता है कि यह बहुत अधिक है तो इसे हटा दें।

ध्यान दें कि जेटीक्स्टपेन में इसके नीचे एक दस्तावेज़ मॉडल है जो आपको चरित्र गणना तक पहुंच प्रदान कर सकता है और शायद इसे थोड़ा आसान हटा सकता है।