java中Swing會(huì)奔跑的線程俠
實(shí)現(xiàn)效果:

奔潰的線程俠:(單線程)
主線程正在處理刷新圖片的請(qǐng)求時(shí),無法再接受其他請(qǐng)求,從而陷入阻塞的死循環(huán)狀態(tài)。
繪制圖片
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("繼續(xù)");
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();
}
}
運(yùn)行結(jié)果:
點(diǎn)擊“開始”按鈕后,程序奔潰。
多線程的窗體布局
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("繼續(xù)");
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();
}
}
運(yùn)行結(jié)果:如頂圖所示。
以上就是本次小編給大家?guī)淼年P(guān)于java中Swing會(huì)奔跑的線程俠這個(gè)示例的講述,感謝大家對(duì)腳本之家的支持。
本文轉(zhuǎn)載于:https://www.idaobin.com/archives/841.html
- 情人節(jié)寫給女朋友Java Swing代碼程序
- Java Swing組件實(shí)現(xiàn)進(jìn)度監(jiān)視功能示例
- Java編程使用卡片布局管理器示例【基于swing組件】
- Java編程使用箱式布局管理器示例【基于swing組件】
- 基于java swing實(shí)現(xiàn)答題系統(tǒng)
- Java實(shí)現(xiàn)的可選擇及拖拽圖片的面板功能【基于swing組件】
- Java編程swing組件JLabel詳解以及使用示例
- java實(shí)現(xiàn)的計(jì)算器功能示例【基于swing組件】
- Java Swing 多線程加載圖片(保證順序一致)
- Java Swing實(shí)現(xiàn)簡(jiǎn)單的體重指數(shù)(BMI)計(jì)算器功能示例
- Java swing實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例
- java swing實(shí)現(xiàn)的掃雷游戲及改進(jìn)版完整示例
- Java swing框架實(shí)現(xiàn)的貪吃蛇游戲完整示例
- Java編程實(shí)現(xiàn)swing圓形按鈕實(shí)例代碼
相關(guān)文章
Java8中對(duì)于LocalDateTime的序列化和反序列化問題
這篇文章主要介紹了Java8中對(duì)于LocalDateTime的序列化和反序列化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Spring Boot Mysql 數(shù)據(jù)庫操作示例
本篇文章主要介紹了Spring Boot Mysql 數(shù)據(jù)庫操作示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
JDK基于CAS實(shí)現(xiàn)原子類盤點(diǎn)解析
這篇文章主要為大家介紹了JDK基于CAS實(shí)現(xiàn)原子類盤點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

