Will this code causes a memory leak?
When will the garbage collector be activated? Is it when the timer finishes? or GC will be called even though the timer is still running?
public static SwingWorker sw;
t2 = new Timer (300,this);
t2.start();
@Override
public void actionPerformed(ActionEvent arg0) {
try {
sw = new TextAreaMainPanelWorker();
sw.execute();
} catch (Throwable e) {
e.printStackTrace();
}
}
TextAreaMainPanelWorker class:
public class TextAreaMainPanelWorker extends SwingWorker<Integer, Integer>
{
protected Integer doInBackground() throws Exception
{
ConnectMysql.fetchMessage(MainPanel.jtep,MainPanel.sd,MainPanel.count);
return 1;
}
protected void done()
{
try
{
ConnectMysql.rodolfol(MainPanel.jtep, MainPanel.sd);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Method for query to database:
public static void fetchMessage(JTextPane jtep,StyledDocument sd,int count )
{
try{
String query = "SELECT members.username, message,color FROM chat JOIN members ON chat.user_id = members.id WHERE message_id > "+count+" AND user_id != 1";
ps = con.prepareStatement(query);
rs = ps.executeQuery();
}catch(Exception e){}
}
public static void rodolfol(JTextPane jtep,StyledDocument sd){
try {
while(rs.next())
{
try {
final JLabel jp = new JLabel(rs.getString("username")+ "\n");
jp.setAlignmentY(0.75f);
final String usernameChat = rs.getString("username");
jp.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {
Cursor c = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
jp.setCursor(c);
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if(SwingUtilities.isRightMouseButton(e)){System.out.print("lawl");}
if(e.getClickCount() == 2)new OneToOneChat(usernameChat);
jp.setForeground(Color.BLUE);
}
@Override
public void mouseReleased(MouseEvent e) {
jp.setForeground(Color.BLACK);
}
});
jp.setFont(new Font("arial",Font.BOLD,16));
jtep.insertComponent(jp);
StyleConstants.setForeground(MainPanel.sas2, Color.BLACK);
MainPanel.sd.insertString(MainPanel.sd.getLength(), ": ", MainPanel.sas2);
StyleConstants.setForeground(MainPanel.sas,new Color(Integer.parseInt(rs.getString("color"))));
sd.insertString(sd.getLength(),rs.getString("message")+ "\n", MainPanel.sas);
} catch (BadLocationException e1) {
}finally{
}
MainPanel.count++;}
} catch (SQLException e) {
}finally{
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { }
rs = null;
}
if (ps != null) {
try {
ps.close();
} catch (SQLException sqlEx) { }
ps = null;
}
}
}