java中Swing會奔跑的線程俠
實現(xiàn)效果:
奔潰的線程俠:(單線程)
主線程正在處理刷新圖片的請求時,無法再接受其他請求,從而陷入阻塞的死循環(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(); } }
運行結(jié)果:
點擊“開始”按鈕后,程序奔潰。
多線程的窗體布局
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(); } }
運行結(jié)果:如頂圖所示。
以上就是本次小編給大家?guī)淼年P(guān)于java中Swing會奔跑的線程俠這個示例的講述,感謝大家對腳本之家的支持。
本文轉(zhuǎn)載于:https://www.idaobin.com/archives/841.html
- 情人節(jié)寫給女朋友Java Swing代碼程序
- Java Swing組件實現(xiàn)進度監(jiān)視功能示例
- Java編程使用卡片布局管理器示例【基于swing組件】
- Java編程使用箱式布局管理器示例【基于swing組件】
- 基于java swing實現(xiàn)答題系統(tǒng)
- Java實現(xiàn)的可選擇及拖拽圖片的面板功能【基于swing組件】
- Java編程swing組件JLabel詳解以及使用示例
- java實現(xiàn)的計算器功能示例【基于swing組件】
- Java Swing 多線程加載圖片(保證順序一致)
- Java Swing實現(xiàn)簡單的體重指數(shù)(BMI)計算器功能示例
- Java swing實現(xiàn)的計算器功能完整實例
- java swing實現(xiàn)的掃雷游戲及改進版完整示例
- Java swing框架實現(xiàn)的貪吃蛇游戲完整示例
- Java編程實現(xiàn)swing圓形按鈕實例代碼
相關(guān)文章
使用Mybatis Generator結(jié)合Ant腳本快速自動生成Model、Mapper等文件的方法
這篇文章主要介紹了使用Mybatis Generator結(jié)合Ant腳本快速自動生成Model、Mapper等文件的方法的相關(guān)資料,需要的朋友可以參考下2016-06-062020macOS Big Sur配置Java開發(fā)環(huán)境之jdk安裝過程
這篇文章主要介紹了2020macOS Big Sur配置Java開發(fā)環(huán)境之jdk安裝,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02詳解Spring?Security怎么從數(shù)據(jù)庫加載我們的用戶
這篇文章主要為大家介紹了Spring?Security怎么從數(shù)據(jù)庫加載我們的用戶示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗證、文件上傳實例代碼
這篇文章主要介紹了Spring學(xué)習(xí)筆記2之表單數(shù)據(jù)驗證、文件上傳 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07