| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 676 人关注过本帖
标题:求大神们帮忙看一下这个倒计时代码
只看楼主 加入收藏
笔墨痕干
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2014-3-24
结帖率:84.21%
收藏
已结贴  问题点数:10 回复次数:6 
求大神们帮忙看一下这个倒计时代码
程序代码:
package 计时器1;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Show extends JFrame//倒计时面板。
{
    Button but1,but2,but3;
    JTextField jt;
    JPanel jp1,jp2;
    public void inint()//面板的初始化
    {
        but1=new Button("开始");
        but2=new Button("暂停");
        but3=new Button("继续");
        jt=new JTextField("00:00:00",10);
        jp1=new JPanel();
        jp2=new JPanel();
        jp1.add(jt);
        jp2.add(but1);
        jp2.add(but2);
        jp2.add(but3);
        this.setTitle("倒计时");
        this.setLayout(new BorderLayout());
        this.add("North",jp1);
        this.add("Center",jp2);
        this.setVisible(true);
        this.setBounds(200, 200, 200, 200);
        but1.addActionListener(new ActionListener()
        {
            //接口,计算总秒数。并且开启线程
            @Override
            public void actionPerformed(ActionEvent e)
            {
                int second=0;
                String[] s=null;
                if(jt.getText().equals("00:00:00"))
                    javax.swing.JOptionPane.showMessageDialog(null, "请输入计时的总时间");
                else
                {
                    s=jt.getText().split(":");//把字符串按照字符":"拆分,反回的值是字符串数组。
                    int[] count=new int[3];
                    for(int i=0;i<3;i++)
                        count[i]=Integer.parseInt(s[i]);//把字符串转化为整形。
                    second=second+count[0]*(int)Math.pow(60, 2)+count[1]*(int)Math.pow(60, 1)+count[2];//计算总秒数
                    Show sh=new Show();
                    Mythread my=new Mythread(second,sh);
                    Thread t=new Thread(my);
                    t.start();
                }
               
            }
           
        });
//        but2.addActionListener();
       
    }
   
}
class Mythread implements Runnable//线程
{
    Show sh;
    boolean flage=true;
    private int s=0;
    private int second=0;
    public Mythread(int s,Show sh)
    {
        this.s=s;
        this.sh=sh;
    }
    public void set(boolean flage)
    {
        this.flage=flage;
    }
    public void run()
    {
        try
        {
            while(flage==true)
                {
                    if(s>=0)
                    {
                        display(this.s);
                        Thread.sleep(1000);
                        this.s--;
                    }
                    else
                        break;
                }
               
        } catch (InterruptedException e) {}                   
           
    }
    public void display(int second)//显示倒计时
    {
        int h=0,m=0;
        while(second>=60)
        {
            m=m+(second/60);
            second=second%60;

        }
        while(m>=60)
        {
            h=h+(m/60);
            m=m%60;
        }
        sh.jt.setText(h+":"+m+":"+second);
}
}
public class JiShi2
{
    public static void main(String[] args)
    {
       
        new Show().inint();

    }

}
图片附件: 游客没有浏览图片的权限,请 登录注册
请问怎么回事啊!!!

[ 本帖最后由 笔墨痕干 于 2014-11-24 14:22 编辑 ]
搜索更多相关主题的帖子: 计时器 
2014-11-24 14:21
编号1016
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:46
专家分:188
注 册:2014-5-8
收藏
得分:10 
程序代码:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class JiShi2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Show().inint();
    }

}
class Show extends JFrame//倒计时面板。
{
    Button but1,but2,but3;
    JTextField jt;
    JPanel jp1,jp2;
    public void inint()//面板的初始化
    {
        but1=new Button("开始");
        but2=new Button("暂停");
        but3=new Button("继续");
        jt=new JTextField("00:00:00",10);
        jp1=new JPanel();
        jp2=new JPanel();
        jp1.add(jt);
        jp2.add(but1);
        jp2.add(but2);
        jp2.add(but3);
        this.setTitle("倒计时");
        this.setLayout(new BorderLayout());
        this.add("North",jp1);
        this.add("Center",jp2);
        this.setVisible(true);
        this.setBounds(200, 200, 200, 200);
        but1.addActionListener(new ActionListener()
        {
            //接口,计算总秒数。并且开启线程
            @Override
            public void actionPerformed(ActionEvent e)
            {
                int second=0;
                String[] s=null;
                if(jt.getText().equals("00:00:00"))
                {
                    javax.swing.JOptionPane.showMessageDialog(null, "请输入计时的总时间");
                    
                }                      
                else
                {
                    s=jt.getText().split(":");//把字符串按照字符":"拆分,反回的值是字符串数组。
                    int[] count=new int[3];
                    for(int i=0;i<3;i++)
                        count[i]=Integer.parseInt(s[i]);//把字符串转化为整形
                    
                    second=second+count[0]*(int)Math.pow(60, 2)+count[1]*(int)Math.pow(60, 1)+count[2];//计算总秒数
                    Show sh=new Show();
                    Mythread my=new Mythread(second,jt);
                    new Thread(my).start();
                    
                    
                    
                }
               
            }
           
        });
//        but2.addActionListener();
       
    }
   
}
class Mythread implements Runnable//线程
{
    JTextField sh;//这边不要实例化Show,要是定义控件的类型,不然jt控件中的内容无法修改。而且你只是修改文本值,只要将窗体中的文本控件传过去就可以了,没必要传整个函数
    private int s=0;
    private int second=0;
    public Mythread(int s,JTextField jt)
    {
        this.s=s;
        this.sh=jt;
    }    
    public void display(int second)//显示倒计时
    {
        int h=0,m=0;
        while(second>=60)
        {
            m=m+(second/60);
            second=second%60;

        }
        while(m>=60)
        {
            h=h+(m/60);
            m=m%60;
        }
        
        sh.setText(h+":"+m+":"+second);
        
}
    //这个run()最好用继承的,不要手写
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            while(true)
            {
                if(s>0)//不能>=0,下面的S--是先赋值后减,最后会变成-1才停止及时
                {
                    
                    Thread.sleep(1000);
                    this.s--;
                    //上面两句代码要先运行后才能运行display(s)这个方法,不然就没法将s的新数值传给display这个方法了
                    display(s);
                    
                }
                else
                {
                    
                    break;
                }
                    
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
} 

后面还有其他问题你在发我这个论坛邮箱里吧

相互学习,让自己变得更强大!
2014-11-25 09:21
笔墨痕干
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2014-3-24
收藏
得分:0 
回复 2 楼 编号 1016
谢谢您了,真的很感谢!!!!!谢谢。我以后就打扰你了。。。。
2014-11-25 13:53
Java258
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:122
专家分:561
注 册:2014-10-15
收藏
得分:0 
以下是引用笔墨痕干在2014/11/25 13:53:52的发言:

谢谢您了,真的很感谢!!!!!谢谢。我以后就打扰你了。。。。结贴啊!朋友,

虔诚请教,虚心学习……
2014-11-25 13:57
笔墨痕干
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2014-3-24
收藏
得分:0 
回复 3 楼 笔墨痕干
程序代码:
package 计时器1;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import import import import import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Show extends JFrame//倒计时面板。
{
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    Mythread my=new Mythread();
    Button but1,but2,but3;
    JTextField jt;
    JPanel jp1,jp2;
    public void inint()//面板的初始化
    {
        but1=new Button("开始");
        but2=new Button("暂停");
        but3=new Button("继续");
        jt=new JTextField("00:00:00",10);
        jp1=new JPanel();
        jp2=new JPanel();
        jp1.add(jt);
        jp2.add(but1);
        jp2.add(but2);
        jp2.add(but3);
        this.setTitle("倒计时");
        this.setLayout(new BorderLayout());
        this.add("North",jp1);
        this.add("Center",jp2);
        this.setVisible(true);
        this.setBounds(200, 200, 200, 200);
        but1.addActionListener(new ActionListener()
        {
            //接口,计算总秒数。并且开启线程
            @Override
            public void actionPerformed(ActionEvent e)
            {
                int second=0;
                String[] s=null;
                if(jt.getText().equals("00:00:00"))
                    javax.swing.JOptionPane.showMessageDialog(null, "请输入计时的总时间");
                else
                {
                    s=jt.getText().split(":");//把字符串按照字符":"拆分,反回的值是字符串数组。
                    int[] count=new int[3];
                    for(int i=0;i<3;i++)
                        count[i]=Integer.parseInt(s[i]);//把字符串转化为整形。
                    second=second+count[0]*(int)Math.pow(60, 2)+count[1]*(int)Math.pow(60, 1)+count[2];//计算总秒数
                    my.My(second,jt);
                    Thread t=new Thread(my);
                    t.start();
                }   
            }
        });
       but2.addActionListener(new ActionListener()
       {
        public void actionPerformed(ActionEvent e)
        {
            if(jt.getText().equals("00:00:00"))
                javax.swing.JOptionPane.showMessageDialog(null, "请输入计时的总时间");
            else   
                {
                    my.set(false);   
                    System.out.println(jt.getText());
                    FileWriter fw=null;
                    try
                    {
                            fw=new FileWriter("记事本.txt",true);
                            fw.write(jt.getText()+LINE_SEPARATOR);
                    }
                    catch (IOException e1)
                    {}
                    finally
                    {
                        try {
                            fw.close();
                        } catch (IOException e1) {
                            System.out.println("文件关闭失败");
                        }
                    }
                   
                }
        }          
       });
      
       but3.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            if(jt.getText().equals("00:00:00"))
                javax.swing.JOptionPane.showMessageDialog(null, "请输入计时的总时间");
            else   
            {
                my.set(true);
            }
        }  
       });
    }
}
class Mythread implements Runnable//线程
{
    JTextField jt;
    private boolean flage=true;
    private int s=0;
    private int second=0;
    public void My(int s,JTextField jt)
    {
        this.s=s;
        this.jt=jt;
    }
    public void set(boolean flage)
    {
        this.flage=flage;
    }
    public void run()
    {   
        while(flage==true)
        {
            try
            {
                    if(s>0)
                    {
                        Thread.sleep(1000);
                        this.s--;
                        display(this.s);
                    }
                    else
                        break;
            } catch (InterruptedException e) {}   
        }   
    }
    public void display(int second)//显示倒计时
    {
        int h=0,m=0;
        while(second>=60)
        {
            m=m+(second/60);
            second=second%60;
        }
        while(m>=60)
        {
            h=h+(m/60);
            m=m%60;
        }
        jt.setText(h+":"+m+":"+second);
        System.out.println(jt.getText());
        System.out.println(second);
}
}
public class JiShi2
{
    public static void main(String[] args)
    {
        new Show().inint();
    }

}
代码还是有问题,在暂停的地方不能立即实行,还有继续的地方线程不运行,再帮我看下吧,谢谢!!
2014-11-26 10:11
编号1016
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:46
专家分:188
注 册:2014-5-8
收藏
得分:0 
回复 5 楼 笔墨痕干
在暂停的代码里添加t.suspend();在继续代码里添加t.resume();“Thread t =new Thread() ”变成Thread t;   t=new Thread (); 两部分!然后把Thread t;放在show这个类里比较靠前面

相互学习,让自己变得更强大!
2014-11-26 14:37
笔墨痕干
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2014-3-24
收藏
得分:0 
回复 6 楼 编号 1016
谢谢你的帮助,你说的suspend()方法和t.resume()方法都已经过时了不能用了,但是我用了interrupt()代替它suspend()方法,暂停功能实现了。继续功能我用的是interrupted()方法但是没有实现。
2014-11-26 20:40
快速回复:求大神们帮忙看一下这个倒计时代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027042 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved