Memory Leak in swing appl
To: comp.lang.java.gui
When I profile my swing application I notice that after each tidy up my
image container (add,remove IconImage objects to a hashmap), there
gather by and by surviving objects. This leads to run out of memory
after a while.
Below the method which is called periodically from a separate thread.
public boolean load() throws SQLException{
boolean isChanged=false;
if(isLoading()==false){
setLoading(true);
//1- check new commings!
List<PersonsCiRow> currentPersons =
PersonCi.getInstance().getData();
for(int i=0; i<currentPersons.size();i++){
PersonsCiRow row = currentPersons.get(i);
String personNr = row.PersonNr;
if(getPersonImageContainer().containsKey(personNr) ==
false){
//load the image from the database, every stream
are closed properly!
Image image =
DbInterfaceEtrainer.getInstance().getPersonImage(personNr);
assert(image != null);
ImageIcon icon = new ImageIcon(image);
getPersonImageContainer().put(personNr,icon);
isChanged=true;
}
}
//2- kick out old
Iterator<String> imageSetIterator =
getPersonImageContainer().keySet().iterator();
while(imageSetIterator.hasNext()){
String containerPersonNr = imageSetIterator.next();
//check if its in the current list
boolean isCurrent = false;
for(int i=0;
i<PersonCi.getInstance().getData().size();i++){
String currentPersonNr =
PersonCi.getInstance().getData().get(i).PersonNr;
//is still current?
if(currentPersonNr.equals(containerPersonNr)){
isCurrent = true;break;//terminate comparision
}
}
if(isCurrent == false){
Tools.echo(String.format("PersonImage: %s.jpg
removed",containerPersonNr));
getPersonImageContainer().get(containerPersonNr).getImage().flush();
imageSetIterator.remove();
isChanged = true;
}
}
setLoading(false);
}
return isChanged;
}
Any idea? thank you.
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24