2010-01-05 4 views
7

Bir yuvaya sürekli olarak veri alan ve bu verileri bir JTextPane'de görüntülerken, bu verileri bir dosyaya kaydeden bir uygulamam var. Doğal olarak, veri JTextPane'in temel belgesine yazıldıkça, bellek kullanımı artmaya devam ediyor.Sınır JTextPane bellek kullanımı

JTextPane'in kullanımına izin verilen hafızayı sınırlamanın basit bir yolu var mı? JTextPane'in tipik bir komut kabuğunun komut geçmişinin nasıl çalıştığına benzemesini isterim.

cevap

7

sadece içeriğini kontrol eder ve o JTextPane Eğer textpane tarafından kullanılan belge sınıfına üzerinde çalışacak beri .. maksimum tampon boyutu buna göre silin:

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

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

Bu yazdım pasajı olan, değil mi' Kişisel olarak kontrol edin .. sadece size fikir vermek için. Tabii ki textPane'e metin eklemeden önce çalıştırılmalıdır.

Btw JTextPane'un zengin editör özelliklerini kullanmıyorsanız, çok daha çakıcı olan bir JTextArea kullanmanızı öneririm.

+0

Bu işe yaramıyor, bunu yapabileceğini düşünebilirsiniz, ancak öyle değil ve benim de bir uygulamada aynı sorunu yaşıyorum. Bir JTextPane düşünün ve bir kaynaktan sürekli olarak satır ekliyorsunuz, eğer satır sayısı 100'ün üzerindeyse, satır 0'ı kaldırın, sonra yeni satır ekleyin. Bu bellek kullanımını kabaca aynı seviyede tutmalı, değil mi? Yanlış ... zamanla benim java app patlar ve sadece 100 satır küçük metin ile 170MB bellek kullanımı olarak bir saat sonra. Neden olduğu hakkında fikrim yok, ya da bunu nasıl düzelteceğim ... –

0

Hayır, metin ekledikçe karakterleri saymalı ve çok düşündüğünüzde bazılarını silmeniz gerekir.

JTextPane'ın altında bir DocumentModel'in bulunduğunu ve bu sayede karakter sayımlarına erişebilmenizi ve silme işlemlerini biraz daha kolaylaştırabileceğinizi unutmayın.