上手多线程(Java)用多线程,就能让图画动起来!

多线程的三个关键:

1.继承 Thread 类,重写 run 方法
2.线程工作代码在 run 方法中写
3.启动时,调用线程对象的 start()

如下,教大家实现一个简单的多线程项目

一.首先写好一个界面,创建一个按钮对象并加入监听

点击按钮后会启动一个新的线程 ThreadDraw 来进行绘图操作

在这段代码中,this.setDefaultCloseOperation(3); 中的数字 3 是指定窗口的关闭操作的代码。在 Java Swing 中,使用整数常量来表示不同的关闭行为,常见的有以下几种:

  • JFrame.DO_NOTHING_ON_CLOSE(常量值为 0):什么也不做,窗口保持打开状态,需要通过程序来处理关闭操作。
  • JFrame.HIDE_ON_CLOSE(常量值为 1):隐藏窗口,但是应用程序继续运行。
  • JFrame.DISPOSE_ON_CLOSE(常量值为 2):释放窗口资源,但应用程序继续运行。
  • JFrame.EXIT_ON_CLOSE(常量值为 3):退出应用程序。这表示当用户关闭窗口时,Java 虚拟机将退出,应用程序完全终止。
import javax.swing.*;
import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestGame01 extends JFrame {

public  void initUI(){
    this.setTitle("多线程平台");
    this.setSize(1000,700);
    this.setDefaultCloseOperation(3);
    JButton buStart=new JButton("随机发射 ");
    this.setLayout(new FlowLayout( ));
    this.setVisible(true);
    Graphics gs = this.getGraphics();

    this.add(buStart);
    buStart.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            ThreadDraw td= new ThreadDraw(gs);

            td.start();  //3.启动时,调用线程对象的 start()

            System.out.println("启动了一个线程对象");
        }
    });
}
    public static void main(String[] args){
    TestGame01 da = new TestGame01();
    da.initUI();
            }
}

二.继承Thread类,重写run方法,执行内容是随机画出圆,并向右移动。

这里创建了一个 Random 对象 ran,用于生成随机数,使用 ran.nextInt(300) 方法生成在 [0, 300) 范围内的随机整数,分别赋值给 xy 变量,这样就确定了初始的圆绘制位置 (x, y)

Thread.sleep(5) 让线程休眠5毫秒,注意单位,用来控制绘制速度,使得绘制的过程可以观察到,真正实现动画效果

最后的代码catch (Exception ef) {}用于异常处理,没有具体的处理逻辑
 

import java.awt.*;
import java.util.Random;

public class ThreadDraw extends Thread{   //1.继承Thread类
    private Graphics gs;

    public ThreadDraw(Graphics gs) {
        this.gs=gs;
    }


    //重写run方法中,是要执行的代码
    public void run() {
        Random ran=new Random();
        int x= ran.nextInt(300);
        int y=ran.nextInt(300);
        for(int i=0;i<400;i++){
            gs.fillOval(x+i,y,20,20);
            try{
                Thread.sleep(5);
            }catch(Exception ef){}}

    }
}

三.效果展示(截图展示,动态效果请自己尝试)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值