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多线程实现奔跑的小人动画代码实现 | 彬菌相关推荐
- java打印两个小人_[原创]Java画小人与阶梯问题的解答
package test; /** #Python源代码: #By:Cat73 QQ 1901803382 #2014年7月22日19:33:12 #画图函数 width:台阶的宽度(至少为4) hi ...
- 线程Java的两种方式_多线程(java和guava两种方式):
1.Java 当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable); 这样可以不影响其他的业务的执行,但是在线程中的异常不能捕获到,也不能知道 ...
- java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌
版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...
- java保留二位小数_java使double保留两位小数的多方法 java保留两位小数
复制代码代码如下: mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00& ...
- java同时启动多个 无法打印_java实现多线程交替打印两个数
本文实例为大家分享了java实现多线程交替打印两个数的具体代码,供大家参考,具体内容如下 方法1.使用wait和notify package com.thread; public class T01 ...
- java编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替
2.编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z.打印顺序为12A34B56C-.5152Z.即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印 ...
- java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)
1. 多线程基础 首先要明白一些概念: 进程:把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程. 线程:某些进程内部还需要同时执行多个子任务.例 ...
- JAVA线程两种方法内存,JAVA线程基础回顾及内存模型(一)
线程创建的两种方式 继承Thread类 class MyThread extends Thread{ ...... @Override public void run(){ ...... } } My ...
- 黑马毕向东Java课程笔记(day11):多线程(第一部分)——进程与线程+线程创建+线程安全与同步代码块+同步锁/死锁
多线程好文:添加链接描述 锁机制:synchronized.Lock.Condition.volatile(原子性可见性)--参考添加链接描述 1.进程与线程概述 首先,对于CPU执行每一个程序, ...
- java多线程异步调用别的系统接口代码_抢先准备,40个 Java 多线程面试题及答案大汇总!...
↑↑↑点上方蓝字关注并标⭐「IT技术思维」 一起培养顶尖技术思维 来源:程序员共成长(id:finishbug) 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有 ...
最新文章
- c语言的特点能够编制出复杂的功能程序,以下不是C语言的特点的是()
- php十天入门教程,十天学会php之第十天_PHP教程
- iservice list方法_MyBatis-Plus 通用IService使用详解
- php怎么生成卡券签名,小程序卡券签名错误的解决方案
- 你周围需要这6种人(文摘)
- 看这玩意复习你还会挂科?《软件工程2篇》
- Spring之 Bean的自动装配
- Json字符串转map集合
- 深度学习进行语音识别的方法 如何建立自己的语音识别系统
- Python实践基于直方图的梯度提升集成方法
- 2021年机修钳工(中级)及机修钳工(中级)复审模拟考试
- chrome PPAPI 开发(一)
- 基于python的大数据分析基础及实战pdf下载_Cloudera Hadoop大数据平台实战指南 PDF 下载...
- python集合的并交差操作
- Java获取电脑外网ip地址方法
- WRF/CMAQ 安装教程
- 希尔顿欢朋中国第200家酒店在杭州开业;玲娜贝儿在上海迪士尼全球首发亮相 | 全球旅报...
- 一次zookeeper启动失败的解决过程
- php下划虚线,怎么定义每一行的文字下面都有下划线虚线?_html/css_WEB-ITnose
- MAC下解压(.xip)文件