java倒计时,设置为1秒,第一次点击正常,之后点击,倒计时的速度越来越快

biao_biao_ji 2017-11-30 10:01:08
public void btnSendMessageActionListsener(){

String dstcNo = jtf_dstcNo.getText();
String phoneNum = jtf_phoneNo.getText();

if(dstcNo.equals("")||dstcNo == null||phoneNum.equals("")||phoneNum == null||phoneNum.length()!=11){
MsgBox.showError(baseMainPanel, "请将相关信息填写正确!");
}else{
times++;
checkCode = phoneinfolistAction.SetCheckCode();

System.out.println("手机号码:"+phoneNum);
System.out.println("序号:"+times);
System.out.println("校验码:"+checkCode);


MessageInfo messageInfo = new MessageInfo();
messageInfo.phoneNum = phoneNum;
messageInfo.times = Integer.toString(times);
messageInfo.checkCode = checkCode;

Map<String, Object> mapper = new HashMap<String, Object>();
mapper = phoneinfolistAction.SendMessage(messageInfo);

GlassPane.getInstance().hideMessage();
int nResult=(Integer)mapper.get("nResult");
if(nResult == 0)
{
//MsgBox.showError(baseMainPanel, "提交成功");
pan_checkcode.setVisible(true);
lab_time.setVisible(true);
//btn_sendmessage.setEnabled(false);
jtf_times.setText(Integer.toString(times));
// jtf_checkcode.setText(checkCode);

time = 180;
final Timer timer =new Timer();
timer.schedule(new TimerTask() {
public void run() {
time--;
lab_time.setText(time+"s后重新发送");
if(time <= 0){
timer.cancel();
lab_time.setVisible(false);
//btn_sendmessage.setEnabled(true);
}
}
}, 0, 1000);
}
else
{
String errMessage=(String)mapper.get("errMessage");
if(nResult > 0 && nResult < 12){
boolean bln = MsgBox.showYESNO(baseMainPanel, errMessage+"。是否继续操作?");
if(bln){
times = 0;
btnSubmitActionListsener();
}
}else{
times = 0;
MsgBox.showError(baseMainPanel, errMessage);
}
}

}
}



第一次点击按钮,倒计时是按照一秒进行倒计时,但是再次点击之后,速度就会变快,感觉就是2秒倒一下,再点击,就3秒倒一下。。。麻烦大佬们看一下是哪里的问题,谢谢。
...全文
761 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanvnie_kaka 2017-11-30
  • 打赏
  • 举报
回复
点一下就应该置灰按钮啊,不能一直点,一直点,重复走监听方法,你的time秒数变量应该又是全局的,当然会有多个监听方法不停修改你的time值,导致倒计速度不停加快
繁华终归落尽 2017-11-30
  • 打赏
  • 举报
回复
贴代码要使用代码模板
public void btnSendMessageActionListsener(){

String dstcNo = jtf_dstcNo.getText();
String phoneNum = jtf_phoneNo.getText();

if(dstcNo.equals("")||dstcNo == null||phoneNum.equals("")||phoneNum == null||phoneNum.length()!=11){
MsgBox.showError(baseMainPanel, "请将相关信息填写正确!");
}else{
times++;
checkCode = phoneinfolistAction.SetCheckCode();	

System.out.println("手机号码:"+phoneNum);
System.out.println("序号:"+times);
System.out.println("校验码:"+checkCode);


MessageInfo messageInfo = new MessageInfo();
messageInfo.phoneNum = phoneNum;
messageInfo.times = Integer.toString(times);
messageInfo.checkCode = checkCode;

Map<String, Object> mapper = new HashMap<String, Object>();
mapper = phoneinfolistAction.SendMessage(messageInfo);

GlassPane.getInstance().hideMessage();
int nResult=(Integer)mapper.get("nResult");
if(nResult == 0)
{	
//MsgBox.showError(baseMainPanel, "提交成功");
pan_checkcode.setVisible(true);
lab_time.setVisible(true);
//btn_sendmessage.setEnabled(false);
jtf_times.setText(Integer.toString(times));
//	jtf_checkcode.setText(checkCode);

time = 180;
final Timer timer =new Timer();
timer.schedule(new TimerTask() {
public void run() {
time--;
lab_time.setText(time+"s后重新发送");
if(time <= 0){
timer.cancel();
lab_time.setVisible(false);
//btn_sendmessage.setEnabled(true);
}
}
}, 0, 1000);
}
else
{
String errMessage=(String)mapper.get("errMessage");
if(nResult > 0 && nResult < 12){
boolean bln = MsgBox.showYESNO(baseMainPanel, errMessage+"。是否继续操作?");
if(bln){
times = 0;
btnSubmitActionListsener();	
}
}else{
times = 0;
MsgBox.showError(baseMainPanel, errMessage);
}
}

}
}
xiongdejun 2017-11-30
  • 打赏
  • 举报
回复
timer.schedule这个方法应该是线程不安全的把?给你的run方法里的代码加一个线程锁,time还是全局变量应该就好了
huage 2017-11-30
  • 打赏
  • 举报
回复
final Timer timer =new Timer(); timer.schedule主要是这个地方的问题 每次点击按钮都会启动一个trmer 这个是线程 点击多次的时候每个Timer都会去更新界面的时间 你如果想多次点击不出问题就把timer做为全局变量,当点击按钮的时候先判断timer 是否存在 存在就关闭在重新new一个这样就能达到目的了
  • 打赏
  • 举报
回复
点击后按钮就不能再点,等计时结束后再让按钮可以点,那样就没问题了。还有一种方法就是如果在计时的时候点了按钮不要有什么反应,只有没在计时时点了才有处理。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧