`
3213213333332132
  • 浏览: 78656 次
社区版块
存档分类
最新评论

继之前的线程循环加到窗口中运行

    博客分类:
  • java
阅读更多
之前写了有关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
1
0
分享到:
评论
1 楼 3213213333332132 2015-06-25  
Draw 里面加的super.paintComponent(g);  是为了是刷新画板,否则画板的文字会一直叠加,变成越来越黑的乌压压的画板。

相关推荐

    qt 多线程 防止主线程做循环操作导致界面假死

    qt 多线程 防止主线程做循环操作导致界面假死。试过多线程的几种方法,只有这个方法可行。代码亲测可行。在子线程死循环,界面正常不死!!!

    易语言彗星载入线程窗口模块

    彗星载入线程窗口模块易语言源码 系统结构:彗星载入线程窗口,彗星销毁线程窗口,窗口线程,OnMessage,消息循环,CreateThread,GetMessage,DispatchMessage,TranslateMessage,PostQuitMessage,CallWindowProc,GetProp

    多线程解决mfc对话框未响应、卡死问题

    多线程解决mfc对话框未响应、卡死问题

    快速解决pyqt5窗体关闭后子线程不同时退出的问题

    用pyqt5设计了一个主窗体,在窗体运行时需要把一个无限循环放在一个线程去工作。运行后,发现通过鼠标按主窗体的关闭按键关闭主创体后,线程不会自动终止,依然在运行。尽管对我的使用场景来说,这不是问题,因为...

    VC 获取主机名和IP地址及多线程运行示例.rar

     获取IP地址是单击窗口右上角的“获缺按钮,即可显示主机名称和该机IP地址,多线程运行演示则打开后程序立即运行,左右两侧不同的线程,执行不同的任务,各自互不影响。  多线程演示部分,分别用了两个线程,每一...

    易语言-使用标签反馈事件实现易语言线程载入窗口

    使用标签反馈事件实现易语言线程载入窗口 大家知道,在线程里载入窗口会闪退,因为线程结束,窗口即被释放,那么常用的...在反馈事件中,实际上是采用单线程的方式来运行的,所以使用反馈事件时,请以业务场景谨慎使用

    使用标签反馈事件来线程载入窗口说明-易语言

    丨前言 大家知道,在线程里载入窗口会闪退,因为线程结束,窗口即被释放,那么常用的方式是在标签的反馈事件里,载入...在反馈事件中,实际上是采用单线程的方式来运行的,所以使用反馈事件时,请以业务场景谨慎使用

    操作系统实验——获取当前系统运行进程的信息

    主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。

    Android应用程序输入事件处理机制

    当前激活的窗口所运行在的线程接收到InputManager分发过来的输入事件之后,会将它们封装成输入消息,然后交给当前获得焦点的控件处理。这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理Input...

    关闭窗体后,进程仍然在运行的问题示例代码

    在开发中,遇到这样一个问题: ... 通过查阅资料,了解到,产生此类问题的原因主要有以下...1)程序中存在死循环。 2)程序为多线程程序,且在窗体关闭后,仍有线程在工作。 本例将针对此类问题,进行重现并提出解决方案。

    《Java网络开发》课程实验教学手册

    实验要求: 自行设计一个多线程程序,用继承Thread类或实现Runnable接口两种方法来实现。...编程求1到100的和及积(分别用while循环、do-while循环和for循环实现)。 等十二个实验的详细作答。供大家学习和参考。

    易语言模拟器中控源码 全新手游模拟器通用中控源码, 适用于各种游戏, 源码现成的只需要更换游戏就可以用哦, 带修改教程,带讲解

    3.本框架最大程度优化解决之前版本的各种问题,优化更新对象及线程创建方式 4.【集保存功能】:全局自动保存日志及读写配置 5.【集成中控台】:一键启动,单个暂停、恢复,全部停止等右键常规操作 6.【多线程监控】...

    Java编写的多线程生命棋游戏(里面的核心算法很有创意)

    * 编程主要思想是:每一个细胞对应窗口中的一个JButton按钮jBCell[i][j], * 每一个jBCell[i][j]对应一个二维数组元素cell[i][j]和 * 一个二维数组元素oldcell[i][j],cell用来更新oldcell, * 定义一个 2行8列...

    【原创】模拟网页自动点击工具 -- 支持自动刷新IP(UV),支持访问MYSQL、MSSQL数据库返回链接,支持自动在线更新

    各位网友大家好,要运行此工具必需先设置好网页信息,点击菜单栏设置或用快捷键(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里了,循环关闭就行了。调用了精易模块 ,这里就不打包了,大家都...

    《易精经》前三章 PDF

    3.3.5 [例]通过窗口句柄来限制程序只运行一个实例 3.3.6 枚举窗口 3.3.6.1 使用EnumWindows函数来枚举窗口 3.3.6.2 使用GetWindow来生成系统窗口树 3.3.7 [例] 窗口侦查工具 3.4 消息、消息循环、窗口...

    精易模块[源码] V5.15

    1、新增“线程_枚举”枚举指定进程ID中所有线程列表,成功返回线程数量,失败返回零。 2、删除“文件_取图标”与"文件_取图标句柄"功能重复。 3、优化“系统_创建桌面快捷方式”流程代码,感谢易友[ds9660]反馈。 4...

    WINDOWS CE 6.0开发者参考.part06.rar

    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 字体 ...

Global site tag (gtag.js) - Google Analytics