欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继之前的线程循环加到窗口中运行 博客分类: java javathreadJFrameJPanel 

程序员文章站 2024-03-12 10:04:20
...
之前写了有关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();
	}
}


  • 继之前的线程循环加到窗口中运行
            
    
    博客分类: java javathreadJFrameJPanel 
  • 大小: 25 KB