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

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

    博客分类:
  • 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 多线程 防止主线程做循环操作导致界面假死

    另一种方式是通过信号槽机制,利用QObject的threadAffinity属性和moveToThread()函数,将特定对象移动到其他线程中运行。 2. 使用QThread防止界面假死 首先,创建一个继承自QThread的子类,并重写run()函数,将耗时...

    易语言源码彗星载入线程窗口模块易语言源码.rar

    深入学习这份源码,我们可以学习到如何在易语言中实现线程的创建和管理,理解线程间通信的方法,以及如何设计一个高效的窗口模块来处理用户交互和数据展示。此外,还能了解到如何通过事件驱动的方式来实现异步编程,...

    售票窗口模拟线程同步

    当`ticket`等于0时,打印“票已售罄”,并终止循环,从而结束线程的运行。 #### 三、线程同步的实现机制 在Java中,线程同步可以通过多种方式实现,其中最常见的就是`synchronized`关键字和显式锁(如`...

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

    多线程是操作系统提供的一种并发执行机制,允许程序中同时运行多个独立的执行流。在MFC中,可以通过CWinThread类创建和管理线程。每个线程都有自己的消息循环,可以独立处理不同的任务,从而避免主线程被长时间运算...

    易语言窗口计次循环特效

    易语言提供了控制窗口透明度的函数,结合计次循环,可以实现窗口从完全可见到不可见,再从不可见到完全可见的过渡。 5. **换页与返回**:在多窗口或页面应用中,窗口的切换和回退是常见需求。通过计次循环和窗口...

    CreateThread函数创建窗口线程.rar_createthread_线程 窗口_线程函数

    线程是进程中的一个执行单元,每个进程至少有一个线程,可以有多个并发运行的线程。线程共享进程的内存空间,但拥有自己的栈空间和程序计数器,这样它们可以并行执行不同的任务。 `CreateThread`函数是Windows API...

    利用线程实现非窗口类定时器的例子

    在Windows编程中,我们通常会依赖窗口消息循环来实现定时器,但这并不总是最理想的解决方案,尤其是在不需要用户界面或者想要在后台运行任务的情况下。本文将探讨如何利用线程实现一个非窗口类的定时器,这对于新手...

    不依赖窗口的单线程Timer

    标题提到的“不依赖窗口的单线程Timer”是一种特殊类型的计时器,它并不依赖于Windows消息循环中的WM_TIMER消息来工作。这种设计可以提供更灵活的计时器使用方式,尤其是在不需要创建和管理窗口的场景下。 首先,...

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

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

    界面线程工作线程之间的通讯

    在软件开发中,尤其是涉及到图形用户界面(GUI)的应用程序,界面线程和工作线程之间的通讯是一个重要的设计环节。界面线程,通常被称为主线程,负责处理用户交互和更新UI,而工作线程则用于执行耗时的操作,避免...

    C# Winform线程创建子窗体

    在C# Winform开发中,多线程技术是不可或缺的一部分,尤其当涉及到用户界面(UI)的异步操作时。线程允许程序同时执行多个任务,提高应用的响应性和效率。本话题将深入探讨如何利用线程来延迟创建子窗体,并且如何安全...

    易语言多线程鼠标点击源码

    结束循环` 用于构成无限循环,确保线程持续运行直到被显式终止。 对于鼠标点击操作,易语言提供了“模拟鼠标点击”命令,可以模拟用户点击鼠标左键或右键。例如,要模拟在坐标(100, 200)处点击左键,我们可以写成:...

    VB 实现多线程

    - **调试限制**:在IDE中无法调试多线程代码,必须生成EXE文件运行。 - **线程安全**:确保所有被多线程使用的变量都已经声明,避免使用隐式声明。 - **资源释放**:当线程完成时,确保释放所有资源,包括关闭窗口等...

    多线程实现人脸快速循环比对

    在本项目“多线程实现人脸快速循环比对”中,开发者利用了seetaface人脸识别库和MFC(Microsoft Foundation Classes)框架来构建一个高效的人脸识别和比对系统。这里我们将详细探讨涉及的知识点。 首先,seetaface...

    多线程同步操作多个窗口.pdf

    10. 异常处理:尽管在上述内容中没有明确提到,但在实际的多线程编程中,应当注意异常情况的处理,比如处理因找不到窗口句柄而产生的错误,以确保程序的稳定运行。 通过上述内容的解析,我们可以看到多线程同步操作...

    易语言简单线程读网页

    综上所述,"易语言简单线程读网页"源码不仅展示了如何在易语言中创建和管理线程,还涉及到网络请求、数据解析、线程同步以及错误处理等多个核心编程概念。对于想要学习易语言网络编程的初学者来说,这是一个很好的...

    12.1 Qt5多线程:多线程及简单实例

    通常,我们不会直接继承QThread,而是创建一个类并重写run()方法,然后在run()中执行我们需要在新线程中运行的代码。 **4. WorkThread类** 在描述中提到的`WorkThread`类是一个继承自`QThread`的自定义类。这个类...

    线程基本知识(英文)

    在单个中央处理器的系统中,尽管看起来线程好像是同时运行的,但实际上它们并非并发执行。这是因为CPU快速地在不同线程之间切换执行代码。当一个线程使用到其时间片时,它会等待下一次机会继续执行代码。在这期间,...

    C#多线程笔记

    2. **消息处理**:当一个新的消息到达时,消息循环会将其发送到相应的窗口过程进行处理。 - **示例**:在Windows编程中,可以通过编写 `WndProc` 方法来处理特定的消息。 ```csharp protected override void ...

Global site tag (gtag.js) - Google Analytics