当前位置: 移动技术网 > IT编程>开发语言>Java > java中Swing会奔跑的线程侠

java中Swing会奔跑的线程侠

2019年07月19日  | 移动技术网IT编程  | 我要评论

实现效果:

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

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

绘制图片

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会奔跑的线程侠这个示例的讲述,感谢大家对移动技术网的支持。

本文转载于:

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网