JAVA窗口上的计时器有时显示有时不显示

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.*;

import timer.MyThread;

public class UserChange extends Super implements WindowListener,Runnable{
JPanel jp;
JTextField jtOpw,jtNpw,jtCNpw;
JLabel jlOpw,jlNpw,jlCNpw,jtime;
JButton jbConfirm,jbBack,jbReset;
int time = 60;
UserChange(){
this("修改密码界面");
}
UserChange(String title){
super(title);

jp = new JPanel();
jp.setLayout(null);

jtOpw = new JTextField();
jtNpw = new JTextField();
jtCNpw = new JTextField();

jlOpw = new JLabel("原密码:");
jlNpw = new JLabel("新密码:");
jlCNpw = new JLabel("确认新密码:");
jbConfirm = new JButton("确认");
jbBack = new JButton("返回");
jbReset = new JButton("清空");
jtime = new JLabel();

jp.add(jlOpw);
jlOpw.setBounds(280, 170, 50, 30);

jp.add(jtOpw);
jtOpw.setBounds(330, 170, 150, 30);

jp.add(jlNpw);
jlNpw.setBounds(280, 230, 50, 30);

jp.add(jtNpw);
jtNpw.setBounds(330, 230, 150, 30);

jp.add(jlCNpw);
jlCNpw.setBounds(255, 290, 70,30);

jp.add(jtCNpw);
jtCNpw.setBounds(330, 290, 150,30);

jp.add(jbReset);
jbReset.setBounds(650,200,80,30);

jp.add(jbBack);
jbBack.setBounds(650,300,80,30);

jp.add(jbConfirm);
jbConfirm.setBounds(650,400,80,30);

jp.add(jtime);
jtime.setBounds(255, 50, 100, 30);

jp.setOpaque(false);
cp.add(jp);

this.addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent e) {
new Thread(new MyThread()).start();
}

@Override
public void windowActivated(WindowEvent e)
{
    // TODO Auto-generated method stub

}




@Override
public void windowClosed(WindowEvent e)
{
    // TODO Auto-generated method stub

}




@Override
public void windowClosing(WindowEvent e)
{
    // TODO Auto-generated method stub

}




@Override
public void windowDeactivated(WindowEvent e)
{
    // TODO Auto-generated method stub

}




@Override
public void windowDeiconified(WindowEvent e)
{
    // TODO Auto-generated method stub

}




@Override
public void windowIconified(WindowEvent e)
{
    // TODO Auto-generated method stub

}});

setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

class MyThread implements Runnable
{
public void run() {
while (time > 0)
{
time--;
jtime.setText("Remains"+time);
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
}

}

UserChange.this.dispose();
}
}
public void run() {
while (time > 0)
{
time--;
jtime.setText(time + "");
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
}

   }

UserChange.this.dispose();
  }

public static void main(String[] args) {
    // TODO Auto-generated method stub

new UserChange();
}

}

http://zhidao.baidu.com/link?url=mhEeYv9jlZSsR2GF9hET3hwXZyT5WGM00sY7a2IOj_zbhcwDd9Ia7v4XcLIioQi-CzJ1LG8LDz1xEcHbvIap2_