之前写了有关java线程的循环执行和结束,因为想制作成exe文件,想把执行的效果加到窗口上,所以就结合了JFrame和JPanel写了这个程序,这里直接贴出代码,在窗口上运行的效果下面有附图。
package thread;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 线程没完没了的循环
*
* @author FuJianyong
* 2015-6-16下午09:22:11
*/
public class EndlessLoop {
//是否结束线程的旗标
volatile boolean flag = true;
//控制是否输出数字
volatile boolean numIncrement = false;
class Endless extends Thread{
public void run(){
long startTime = System.currentTimeMillis();
writeString("线程开始正在生成随机数...");
Random random = new Random();
//随机数开关
int power = 0;
//计数
int i = 0;
while(flag){
power = random.nextInt(50);
writeString("while循环产生的随机数: " + power);
if(power == 19){
//结束线程
flag = false;
break;
}
for(;;){
power = random.nextInt(888);
if(power % 2 == 0 || power > 200){
//偶数则计数器增加
numIncrement = true;
}else{
//奇数则计数器停止增加
numIncrement = false;
}
if(numIncrement){
writeString("for循环产生的随机数是: " + power + " 计数器增加: " + ++i + " " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
try {
Thread.sleep(power * 2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
writeString("for循环产生的随机数是: " + power + " 计数器停止...");
break;
}
}
}
long endTime = System.currentTimeMillis();
writeString("线程结束等待垃圾回收...");
writeString("=====线程执行开始时间为: " + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(startTime));
writeString("=====线程执行结束时间为: " + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(endTime));
}
}
public void start(){
new Endless().start();
}
public static void main(String[] args) {
new EndlessLoop().start();
}
//重写构造方法
public EndlessLoop(){
JFrame frame = new JFrame("test");
frame.setLocation(500, 200);
frame.setSize(500, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(draw);
}
Draw draw = new Draw();
String temp0 = "";
String temp1 = "";
String temp2 = "";
String temp3 = "";
String temp4 = "";
String temp5 = "";
String temp6 = "";
String temp7 = "";
String temp8 = "";
String temp9 = "";
String temp10 = "";
class Draw extends JPanel{
public void paint(Graphics g){
super.paintComponent(g);
g.drawString(temp0, 20, 20);
g.drawString(temp1, 20, 50);
g.drawString(temp2, 20, 80);
g.drawString(temp3, 20, 110);
g.drawString(temp4, 20, 140);
g.drawString(temp5, 20, 170);
g.drawString(temp6, 20, 200);
g.drawString(temp7, 20, 230);
g.drawString(temp8, 20, 260);
g.drawString(temp9, 20, 290);
g.drawString(temp10, 20, 320);
g.dispose();
}
}
int i = 0;
public void writeString(String str){
switch(i){
case 0:
temp0 = str;
break;
case 1:
temp1 = str;
break;
case 2:
temp2 = str;
break;
case 3:
temp3 = str;
break;
case 4:
temp4 = str;
break;
case 5:
temp5 = str;
break;
case 6:
temp6 = str;
break;
case 7:
temp7 = str;
break;
case 8:
temp8 = str;
break;
case 9:
temp9 = str;
break;
case 10:
temp10 = str;
break;
}
if(i>10){
temp1 = temp2;
temp2 = temp3;
temp3 = temp4;
temp4 = temp5;
temp5 = temp6;
temp6 = temp7;
temp7 = temp8;
temp8 = temp9;
temp9 = temp10;
temp10 = str;
}
i++;
draw.repaint();
}
}
- 大小: 25 KB
分享到:
相关推荐
qt 多线程 防止主线程做循环操作导致界面假死。试过多线程的几种方法,只有这个方法可行。代码亲测可行。在子线程死循环,界面正常不死!!!
彗星载入线程窗口模块易语言源码 系统结构:彗星载入线程窗口,彗星销毁线程窗口,窗口线程,OnMessage,消息循环,CreateThread,GetMessage,DispatchMessage,TranslateMessage,PostQuitMessage,CallWindowProc,GetProp
多线程解决mfc对话框未响应、卡死问题
用pyqt5设计了一个主窗体,在窗体运行时需要把一个无限循环放在一个线程去工作。运行后,发现通过鼠标按主窗体的关闭按键关闭主创体后,线程不会自动终止,依然在运行。尽管对我的使用场景来说,这不是问题,因为...
获取IP地址是单击窗口右上角的“获缺按钮,即可显示主机名称和该机IP地址,多线程运行演示则打开后程序立即运行,左右两侧不同的线程,执行不同的任务,各自互不影响。 多线程演示部分,分别用了两个线程,每一...
使用标签反馈事件实现易语言线程载入窗口 大家知道,在线程里载入窗口会闪退,因为线程结束,窗口即被释放,那么常用的...在反馈事件中,实际上是采用单线程的方式来运行的,所以使用反馈事件时,请以业务场景谨慎使用
丨前言 大家知道,在线程里载入窗口会闪退,因为线程结束,窗口即被释放,那么常用的方式是在标签的反馈事件里,载入...在反馈事件中,实际上是采用单线程的方式来运行的,所以使用反馈事件时,请以业务场景谨慎使用
主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。
当前激活的窗口所运行在的线程接收到InputManager分发过来的输入事件之后,会将它们封装成输入消息,然后交给当前获得焦点的控件处理。这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理Input...
在开发中,遇到这样一个问题: ... 通过查阅资料,了解到,产生此类问题的原因主要有以下...1)程序中存在死循环。 2)程序为多线程程序,且在窗体关闭后,仍有线程在工作。 本例将针对此类问题,进行重现并提出解决方案。
实验要求: 自行设计一个多线程程序,用继承Thread类或实现Runnable接口两种方法来实现。...编程求1到100的和及积(分别用while循环、do-while循环和for循环实现)。 等十二个实验的详细作答。供大家学习和参考。
3.本框架最大程度优化解决之前版本的各种问题,优化更新对象及线程创建方式 4.【集保存功能】:全局自动保存日志及读写配置 5.【集成中控台】:一键启动,单个暂停、恢复,全部停止等右键常规操作 6.【多线程监控】...
* 编程主要思想是:每一个细胞对应窗口中的一个JButton按钮jBCell[i][j], * 每一个jBCell[i][j]对应一个二维数组元素cell[i][j]和 * 一个二维数组元素oldcell[i][j],cell用来更新oldcell, * 定义一个 2行8列...
各位网友大家好,要运行此工具必需先设置好网页信息,点击菜单栏设置或用快捷键(Alt+E)进入到设置页面,设置页面其中包括三个Tab:基本配置、网页信息和数据库。基本配置:如果要运行页面点击时自动刷新外网IP就要...
3.3.5 [例]通过窗口句柄来限制程序只运行一个实例 3.3.6 枚举窗口 3.3.6.1 使用EnumWindows函数来枚举窗口 3.3.6.2 使用GetWindow来生成系统窗口树 3.3.7 [例] 窗口侦查工具 3.4 消息、消息循环、窗口...
核心代码与界面分离,使用类模块封装,支持任务线程状态回调,不过我没有写停止线程方法,要写也很简单,在启动时已经把线程句柄存到threadHandleArr里了,循环关闭就行了。调用了精易模块 ,这里就不打包了,大家都...
3.3.5 [例]通过窗口句柄来限制程序只运行一个实例 3.3.6 枚举窗口 3.3.6.1 使用EnumWindows函数来枚举窗口 3.3.6.2 使用GetWindow来生成系统窗口树 3.3.7 [例] 窗口侦查工具 3.4 消息、消息循环、窗口...
1、新增“线程_枚举”枚举指定进程ID中所有线程列表,成功返回线程数量,失败返回零。 2、删除“文件_取图标”与"文件_取图标句柄"功能重复。 3、优化“系统_创建桌面快捷方式”流程代码,感谢易友[ds9660]反馈。 4...
1.5.7 消息循环 1.5.8 窗口过程 1.6 hello ce 1.7 运行hello ce 第2章 在屏幕上绘图 2.1 绘图基础 2.1.1 合法和非法区域 2.1.2 设备上下文 2.2 文本输出 2.2.1 设备上下文属性 2.2.2 textdemo示例程序 2.2.3 字体 ...