当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

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

发表于: 2015-06-25   作者:3213213333332132   来源:转载   浏览:
摘要: 之前写了有关java线程的循环执行和结束,因为想制作成exe文件,想把执行的效果加到窗口上,所以就结合了JFrame和JPanel写了这个程序,这里直接贴出代码,在窗口上运行的效果下面有附图。 package thread; import java.awt.Graphics; import java.text.SimpleDateFormat; import java.util
之前写了有关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();
	}
}


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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
[OpenCV]在显示窗口中截图 简介 介绍使用OpenCV实现简单的截图功能。首先阐述实现此功能的基本步骤
有时候我们需要把 OpenGL 中渲染出来的图像截下来。首先获取窗口的宽和高: GetClientSize(&w, &h);
同事刚刚装了 Vista ,就郁闷了。原来,他想在“资源管理器”中查看一下 Windows 的版本信息,却死
在我们第一讲当中的窗口中,我们仅仅就是学习了如何使用GTK+创建一个空白的窗口,但是仅仅一个空白窗
WPF可以在窗体内定义resources,其中可以写一些模板什么的。也可以在里面直接引用其他资源字典文件
【问题】 cygwin中使用fop过程中,其输出的中文部分,显示乱码: 【解决过程】 1.其实这个问题,之
Flex开发中遇到一个问题,就是在弹出的子窗口中怎么将添加的内容即时地显示在父窗口中呢?一般的思
   1. 前言   在PowerBuilder中数据窗口(DataWindow)技术可以说是PB的核心,以至于Sybase公司
   1. 前言   在PowerBuilder中数据窗口(DataWindow)技术可以说是PB的核心,以至于Sybase公司
   1. 前言   在PowerBuilder中数据窗口(DataWindow)技术可以说是PB的核心,以至于Sybase公司
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号