java中Swing会奔跑的线程侠
作者:彬菌 发布时间:2021-12-14 23:47:36
标签: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();
}
}
运行结果:如顶图所示。
本文转载于:https://www.idaobin.com/archives/841.html
0
投稿
猜你喜欢
- 初始化方式一:@PostConstruct注解假设类UserController有个成员变量UserService被@Autowired修饰
- mport java.text.DecimalFormat; DecimalFormat &nb
- 本文实例为大家分享了java实现简单石头剪刀布游戏的具体代码,供大家参考,具体内容如下问题描述Alice, Bob和Cindy一起玩猜拳的游
- 第一部分 问题描述1.1 具体任务本次作业任务是轨迹压缩,给定一个GPS数据记录文件,每条记录包含经度和维度两个坐标字段,所有记录的经纬度坐
- 如图所示的效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用CountDownTimer定时器简单封装下此效果,方便我们
- 本文实例讲述了JavaMail实现邮件发送的方法。分享给大家供大家参考。具体如下:下载 activation.jar 和 mail.jar配
- 1.问题产生情况我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_gene
- 对于服务器端开发人员而言,调用第三方接口获取数据,将其“代理”转化并返给客户端几乎是家常便
- 本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下一.上传1.前端:<form method="
- C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件
- Android 中ScrollView嵌套GridView,ListView的实例在Android开发中,经常有一些UI需要进行固定styl
- Step1: 安装JDK并配置环境变量;Step2: 安装Gradle进入点击打开链接官网首页点击install gra
- 一、方法的定义1.方法体中最后返回值可以使用return, 如果使用了return, 那么方法体的返回值类型一定要指定2.如果方法体重没有r
- 类加载子系统classLoader 只负责对字节码文件的加载,至于是否可以运行,还要看执行引擎。加载的类信息存放于方法区的内存空间,除了类信
- @Autowired加到接口上但获取的是实现类问题Spring的@Autowired加到接口上但获取的是实现类? &
- 一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时
- 本文实例为大家分享了OpenCV实现人脸识别程序的具体代码,供大家参考,具体内容如下//Haar特征检测,人脸识别算法,是用xml作为训练后
- 1、Java内存模型 Java虚拟机在执行程序时把它管理的内存分为若干数据区域,这些数据区域分布情况如下图所示:程序计数器:一块较小内存区域
- 概述RocketMQ 支持发送延迟消息,但不支持任意时间的延迟消息的设置,仅支持内置预设值的延迟时间间隔的延迟消息;预设值的延迟时间间隔为:
- 一、spring-boot-devtools在pom中直接引入依赖<dependency> <groupId&