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

java中Swing会奔跑的线程侠

程序员文章站 2022-03-10 10:52:07
实现效果: 奔溃的线程侠:(单线程) 主线程正在处理刷新图片的请求时,无法再接受其他请求,从而陷入阻塞的死循环状态。 绘制图片 import java....

实现效果:

java中Swing会奔跑的线程侠

奔溃的线程侠:(单线程)

主线程正在处理刷新图片的请求时,无法再接受其他请求,从而陷入阻塞的死循环状态。

绘制图片

import java.awt.graphics;
import java.awt.image;
import java.awt.toolkit;

import javax.swing.jpanel;

public class cartonperson extends jpanel implements runnable{
	image img[]=new image[6];
	int index=0;
	int speed;
	public cartonperson(int speed){
		this.speed=speed;
		img[0]=toolkit.getdefaulttoolkit().getimage("1.png");
		img[1]=toolkit.getdefaulttoolkit().getimage("2.png");
		img[2]=toolkit.getdefaulttoolkit().getimage("3.png");
		img[3]=toolkit.getdefaulttoolkit().getimage("4.png");
		img[4]=toolkit.getdefaulttoolkit().getimage("5.png");
		img[5]=toolkit.getdefaulttoolkit().getimage("6.png");
	}
	public void run(){
		while(true){
			try{
				repaint();
				thread.sleep(100);
			}
			catch(interruptedexception e){
				e.printstacktrace();
			}
		}
	}
	@override
	public void paintcomponent(graphics g) {
		// todo auto-generated method stub
		super.paintcomponent(g);
		g.drawimage(img[index], 0, 0, getwidth(), getheight(), this);
//		system.out.println(index);
		if(index==5){
			index=0;
		}
		else{
			index++;
		}
	}
}

单线程的窗体布局

import java.awt.event.actionevent;
import java.awt.event.actionlistener;

import javax.swing.jbutton;
import javax.swing.jframe;


public class singlethreadcarton extends jframe{
	cartonperson p1;
	jbutton bstart=new jbutton("开始");
	jbutton bpause=new jbutton("稍等");
	jbutton bresume=new jbutton("继续");
	singlethreadcarton(){
		init();
		this.settitle("奔溃的线程侠");
		this.setsize(600, 500);
		this.setresizable(true);
		this.setlocationrelativeto(null);
		this.setdefaultcloseoperation(exit_on_close);
		this.setvisible(true);
	}
	void init(){
		this.setlayout(null);
		p1=new cartonperson(0);
		p1.setbounds(260, 100, 80, 160);
		bstart.setbounds(260,280, 80, 30);
		bpause.setbounds(260, 320, 80, 30);
		bresume.setbounds(260, 360, 80, 30);
		this.add(p1);
		this.add(bstart);
		this.add(bpause);
		this.add(bresume);
		buttonclick bc=new buttonclick();
		bstart.addactionlistener(bc);
		bpause.addactionlistener(bc);
		bresume.addactionlistener(bc);
	}
	class buttonclick implements actionlistener{

		@override
		public void actionperformed(actionevent e) {
			// todo auto-generated method stub
			if(e.getsource()==bstart){
				p1.run();
			}
			else if(e.getsource()==bpause){
				
			}
			else if(e.getsource()==bresume){
				
			}
		}
	}
	public static void main(string[] args){
		new singlethreadcarton();
	}
}

运行结果:

点击“开始”按钮后,程序奔溃。

多线程的窗体布局

import java.awt.event.actionevent;
import java.awt.event.actionlistener;

import javax.swing.jbutton;
import javax.swing.jframe;

public class multithreadcarton extends jframe{
	cartonperson p1;
	thread t1;
	jbutton bstart=new jbutton("开始");
	jbutton bpause=new jbutton("稍等");
	jbutton bresume=new jbutton("继续");
	multithreadcarton(){
		init();
		this.settitle("奔跑的线程侠");
		this.setsize(600, 500);
		this.setresizable(true);
		this.setlocationrelativeto(null);
		this.setdefaultcloseoperation(exit_on_close);
		this.setvisible(true);
	}
	void init(){
		this.setlayout(null);
		p1=new cartonperson(0);
		p1.setbounds(260, 100, 80, 160);
		bstart.setbounds(260,280, 80, 30);
		bpause.setbounds(260, 320, 80, 30);
		bresume.setbounds(260, 360, 80, 30);
		this.add(p1);
		this.add(bstart);
		this.add(bpause);
		this.add(bresume);
		buttonclick bc=new buttonclick();
		bstart.addactionlistener(bc);
		bpause.addactionlistener(bc);
		bresume.addactionlistener(bc);
		t1=new thread(p1);
	}
	class buttonclick implements actionlistener{
		@override
		public void actionperformed(actionevent e) {
			// todo auto-generated method stub
			if(e.getsource()==bstart){
//				p1.run();
				t1.start();
			}
			else if(e.getsource()==bpause){
				t1.suspend();
			}
			else if(e.getsource()==bresume){
				t1.resume();
			}
		}
	}
	public static void main(string[] args){
		new multithreadcarton();
	}
}

运行结果:如顶图所示。

以上就是本次小编给大家带来的关于java中swing会奔跑的线程侠这个示例的讲述,感谢大家对的支持。

本文转载于: