接着上面的例子,我们来制作一个计时器,呃,这个例子或许有些难,我会讲的尽量详细

我先来介绍启动新线程的方法:

Runnable runnable=newRunnable() {publicvoidrun() {//这里写要运行的代码}

};

Thread clock=newThread(runnable);

clock.start();

为什么要通过启动新线程来计时呢?这是因为在swt的桌面程序中,会有一个UI线程,也就是主线程,会不断的重绘UI界面,并且处理主线程的事件,如果在主线程上做一个比较耗时的操作,会让界面处于假死状态,而计时器是通过Thread.sheep来实现的,线程会处于阻塞状态,势必会造成UI界面假死,而如果启动新的线程,并不影响主线程,计时的时候,就不会影响主线程的操作了。

我实现了最简单的计时器:从1开始计时,计到10,完成:

Runnable runnable=newRunnable() {publicvoidrun() {intnum=0;while(num<10) {

num++;finalinttemp=num;

Display.getDefault().asyncExec(newRunnable() {publicvoidrun() {

text.setText(Integer.toString(temp));

}

});try{

Thread.sleep(1000);

}catch(InterruptedException e) {

}

}

Display.getDefault().asyncExec(newRunnable() {publicvoidrun() {

text.setText("完成");

}

});

}

};

Thread clock=newThread(runnable);

clock.start();

你可能会觉得我比较啰嗦,不过我还是要讲一下:

1.clock是我创建的线程,clock.start()启动线程,开始执行run()事件,run()自动执行,无需手动调用

2.本来是简单的一句:

text.setText(Integer.toString(temp));

要这么使用才可以:

Display.getDefault().asyncExec(new Runnable() {

public void run() {

text.setText(Integer.toString(temp));

}

});

因为在其他线程中调用UI线程,需要调用Display.getDefault().asyncExec() 方法,否则没有权限,会报错

3.Thread.sleep(1000);是指线程堵塞1秒钟,通过while循环每隔1秒钟执行一次,达到计时的效果

java线程写个计时器_用Java开发C/S应用(二):启动新的线程,制作一个计时器...相关推荐

  1. java怎么写桌面日历_基于java的桌面日历系统的设计与实现毕业设计论文最终版.doc...

    基于java的桌面日历系统的设计与实现毕业设计论文最终版 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计( ...

  2. java自己写不出来_第一次java考试(考试的时候没做出来自己回来写好的还是缺乏练习)...

    package yuanzhoulv; import java.util.Scanner; public class zuoye { public static void main(String[] ...

  3. 在java中写出html代码,在java里写html代码

    在java里写html代码 [2021-02-09 07:31:38]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  4. java图片异步加载_使用java concurrent处理异步加载图片功能

    转载:http://marshal.easymorse.com/archives/3081 java5开始,增加了concurrent api,用于并发处理.比如起多个线程并发从网络上下载图片,然后在 ...

  5. java打印对象头信息_打印Java对象头

    打印Java对象头 对象头形式 JVM中对象头的方式有以下两种(以32位JVM为例)普通对象|----------------------------------------------------- ...

  6. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  7. java 计时器_【java内存】内存结构

    开局3张图,结论全靠吹,全文所有内容都围绕这3个图展开. 1.java语言编译解释过程 我们编写的java语言,经过java源码编译器后会编译成jvm字节码,也就是.class文件. 然后再通过类加载 ...

  8. 学java用什么写比较好_学习Java需要什么基础,初学Java如何写好代码

    原标题:学习Java需要什么基础,初学Java如何写好代码 初学Java的同学时常会遇到这样的情况,跟着入门教程看过一遍,但需要自己写代码的时候却无从下手:写代码的时候时常会遇到不懂的地方,如果停下来 ...

  9. java 解析m3u8的实例_使用java线程池批量下载m3u8。合并mp4.

    使用java线程池批量下载m3u8合并mp4. 看了线程池的demo,然后就想下载文件试试. 代码未必规范,多多建议. 大家可以自行修改,满足自己的需求. 还需要深入学习一下线程池. 给俺个星星⭐,可 ...

最新文章

  1. oracle 错误2 启动服务提示找不到指定文件_Weblogic中间件创建文件权限问题解决...
  2. 【Linux】11.将ubuntu电脑设置为一台可远程ssh或sftp访问的服务器
  3. RedHat/Centos修改root密码
  4. LDAP常用命令解析
  5. springboot mybatis-plus 配置 yml 、druid 配置 yml 、mybatis-plus 代码生成
  6. leetcode323. 无向图中连通分量的数目
  7. opencv 手册_有兴趣吗?程序员分手手册,教你如何恢复单身
  8. recycleview 自动循环滚动_滚动真空包装机包装东北冷面和400真空机包装东北冷面的比较...
  9. MY WAY程序(十八) 团队开发
  10. 拳王虚拟项目公社:解除网站禁止复制的插件,Simple Allow Copy V 0.8.2
  11. 3500简介_古巴比伦,公元前3500年建立文明!四大文明之首为何被灭?
  12. [windows+cocos2dx]CCSprite精灵类
  13. unity3d面试题
  14. cesium加载KML、KMZ数据
  15. Ant design的Table组件报错TypeError: rawData.some is not a function
  16. 关于可达矩阵的O(N*N)算法和强分图的O(E)算法
  17. QConf分布式配置管理工具 QConf
  18. 微信小程序毕业设计 基于微信共享小程序系统开题报告
  19. 移动端项目-黑马面面项目
  20. CodeForces - 1646E Power Board (思维,数学)

热门文章

  1. 37~python 字符串
  2. Latex使用ctex宏包没有隶书
  3. [转]汉字转换为拼音
  4. RouterOS(ROS)定时备份配置并发送至邮箱脚本
  5. 准备笔试-埃森哲在线笔试
  6. 软件工程毕业设计 SSM健身运动平台管理系统(源码+论文)
  7. android 通话记录分析,Android中联系人和通话记录详解(1)
  8. 石墨烯技术到底是什么?
  9. 萤石网络——让安全便捷的科技生活走入千家万户
  10. 如何在 WordPress 中创建联系表格?