java中Swing会奔跑的线程侠

网友投稿 252 2023-02-15


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 sphttp://eed){

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();

fFGqkOOthis.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会奔跑的线程侠这个示例的讲述,感谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:window版 IntelliJ IDEA 快捷键图文教程
下一篇:webpack项目调试以及独立打包配置文件的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~