java中Swing会奔跑的线程侠
更新时间:2018年03月01日 08:06:01 作者:彬菌
本文通过代码示例给大家详细讲解了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会奔跑的线程侠这个示例的讲述,感谢大家对脚本之家的支持。
本文转载于:https://www.idaobin.com/archives/841.html
您可能感兴趣的文章:
- 情人节写给女朋友Java Swing代码程序
- Java Swing组件实现进度监视功能示例
- Java编程使用卡片布局管理器示例【基于swing组件】
- Java编程使用箱式布局管理器示例【基于swing组件】
- 基于java swing实现答题系统
- Java实现的可选择及拖拽图片的面板功能【基于swing组件】
- Java编程swing组件JLabel详解以及使用示例
- java实现的计算器功能示例【基于swing组件】
- Java Swing 多线程加载图片(保证顺序一致)
- Java Swing实现简单的体重指数(BMI)计算器功能示例
- Java swing实现的计算器功能完整实例
- java swing实现的扫雷游戏及改进版完整示例
- Java swing框架实现的贪吃蛇游戏完整示例
- Java编程实现swing圆形按钮实例代码
相关文章
使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法
这篇文章主要介绍了使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法的相关资料,需要的朋友可以参考下2016-06-062020macOS Big Sur配置Java开发环境之jdk安装过程
这篇文章主要介绍了2020macOS Big Sur配置Java开发环境之jdk安装,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-02-02详解Spring Security怎么从数据库加载我们的用户
这篇文章主要为大家介绍了Spring Security怎么从数据库加载我们的用户示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-01-01
最新评论