java线程写个计时器_用Java开发C/S应用(二):启动新的线程,制作一个计时器...
接着上面的例子,我们来制作一个计时器,呃,这个例子或许有些难,我会讲的尽量详细
我先来介绍启动新线程的方法:
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应用(二):启动新的线程,制作一个计时器...相关推荐
- java怎么写桌面日历_基于java的桌面日历系统的设计与实现毕业设计论文最终版.doc...
基于java的桌面日历系统的设计与实现毕业设计论文最终版 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计( ...
- java自己写不出来_第一次java考试(考试的时候没做出来自己回来写好的还是缺乏练习)...
package yuanzhoulv; import java.util.Scanner; public class zuoye { public static void main(String[] ...
- 在java中写出html代码,在java里写html代码
在java里写html代码 [2021-02-09 07:31:38] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...
- java图片异步加载_使用java concurrent处理异步加载图片功能
转载:http://marshal.easymorse.com/archives/3081 java5开始,增加了concurrent api,用于并发处理.比如起多个线程并发从网络上下载图片,然后在 ...
- java打印对象头信息_打印Java对象头
打印Java对象头 对象头形式 JVM中对象头的方式有以下两种(以32位JVM为例)普通对象|----------------------------------------------------- ...
- 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)
黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...
- java 计时器_【java内存】内存结构
开局3张图,结论全靠吹,全文所有内容都围绕这3个图展开. 1.java语言编译解释过程 我们编写的java语言,经过java源码编译器后会编译成jvm字节码,也就是.class文件. 然后再通过类加载 ...
- 学java用什么写比较好_学习Java需要什么基础,初学Java如何写好代码
原标题:学习Java需要什么基础,初学Java如何写好代码 初学Java的同学时常会遇到这样的情况,跟着入门教程看过一遍,但需要自己写代码的时候却无从下手:写代码的时候时常会遇到不懂的地方,如果停下来 ...
- java 解析m3u8的实例_使用java线程池批量下载m3u8。合并mp4.
使用java线程池批量下载m3u8合并mp4. 看了线程池的demo,然后就想下载文件试试. 代码未必规范,多多建议. 大家可以自行修改,满足自己的需求. 还需要深入学习一下线程池. 给俺个星星⭐,可 ...
最新文章
- oracle 错误2 启动服务提示找不到指定文件_Weblogic中间件创建文件权限问题解决...
- 【Linux】11.将ubuntu电脑设置为一台可远程ssh或sftp访问的服务器
- RedHat/Centos修改root密码
- LDAP常用命令解析
- springboot mybatis-plus 配置 yml 、druid 配置 yml 、mybatis-plus 代码生成
- leetcode323. 无向图中连通分量的数目
- opencv 手册_有兴趣吗?程序员分手手册,教你如何恢复单身
- recycleview 自动循环滚动_滚动真空包装机包装东北冷面和400真空机包装东北冷面的比较...
- MY WAY程序(十八) 团队开发
- 拳王虚拟项目公社:解除网站禁止复制的插件,Simple Allow Copy V 0.8.2
- 3500简介_古巴比伦,公元前3500年建立文明!四大文明之首为何被灭?
- [windows+cocos2dx]CCSprite精灵类
- unity3d面试题
- cesium加载KML、KMZ数据
- Ant design的Table组件报错TypeError: rawData.some is not a function
- 关于可达矩阵的O(N*N)算法和强分图的O(E)算法
- QConf分布式配置管理工具 QConf
- 微信小程序毕业设计 基于微信共享小程序系统开题报告
- 移动端项目-黑马面面项目
- CodeForces - 1646E Power Board (思维,数学)