Realize the effect:
The crashing thread man: (single thread)
When the main thread is processing a request to refresh the image, it cannot accept other requests, thus falling into a blocking dead loop state.
Draw pictures
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();}}}@Overridepublic void paintComponent(Graphics g) {// TODO Auto-generated method stubsuper.paintComponent(g);g.drawImage(img[index], 0, 0, getWidth(), getHeight(), this);//System.out.println(index);if(index==5){index=0;}else{index++;}}}}Single-threaded form layout
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("Start");JButton bpause=new JButton("Wait");JButton brew=new JButton("Continue");SingleThreadCarton(){init();this.setTitle("Breaking ThreadMan");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);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(bc);}class ButtonClick implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==bstart){p1.run();}else if(e.getSource()==bpause){}else if(e.getSource()==bresume){}}} public static void main(String[] args){new SingleThreadCarton();}}Running results:
After clicking the "Start" button, the program crashes.
Multi-threaded form layout
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("Start");JButton bpause=new JButton("Wait");JButton brew=new JButton("Continue");MultiThreadCarton(){init();this.setTitle("Running Threadman");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);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.setBounds(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, 80, 30);bresume.addActionListener(260, 360, ButtonClick implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(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();}}Running result: as shown in the top figure.
The above is the description of the example of the Thread Hero who can run in Swing in Java this time. Thank you for your support for Wulin.com.
This article is reproduced at: https://www.idaobin.com/archives/841.html