java中Swing会奔跑的线程侠
程序员文章站
2022-06-14 23:35:21
实现效果:
奔溃的线程侠:(单线程)
主线程正在处理刷新图片的请求时,无法再接受其他请求,从而陷入阻塞的死循环状态。
绘制图片
import java....
实现效果:
奔溃的线程侠:(单线程)
主线程正在处理刷新图片的请求时,无法再接受其他请求,从而陷入阻塞的死循环状态。
绘制图片
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会奔跑的线程侠这个示例的讲述,感谢大家对的支持。
本文转载于: