首页 > 编程语言 >上手多线程(Java)用多线程,就能让图画动起来!

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

时间:2024-07-28 23:29:26浏览次数:15  
标签:图画 gs import 线程 new Java 多线程 public

多线程的三个关键:

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){}}

    }
}

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

标签:图画,gs,import,线程,new,Java,多线程,public
From: https://blog.csdn.net/Flechazo41521/article/details/140757270

相关文章

  • java基础 手写回忆篇
     java特性:分布行,跨平台性,安全行,多线程,面向对象编程,简单性高级语言分为编译型和解释型:编译型:整个程序写完一起编译速度快效率高解释性:需要一句解释一句编译速度慢效率低java是两者综合:编译器(javac)先把你写好的代码编译成class文件(字节码文件)再用jvm,java虚拟机(解释器)解释执......
  • 最细哈希表相关的力扣题和讲解和Java、C++常用的数据结构(哈希法)来源于代码随想录,十分
    20240725一、什么时候适用什么样的结构。1.java中1.1HashSet:1.2TreeSet:1.3LinkedHashSet:1.4HashMap:1.5TreeMap:1.6LinkedHashMap:1.7总结2.c++中2.1std::unordered_set:2.2std::set:2.3std::multiset:2.4std::unordered_map:2.5std::map:2.6std::multimap:3代码......
  • Java的基础语法
    Java的基础语法首字母缩写1. 简写含义psvm:publicstaticvoidmain(String[]args){sout:System.out.println("Hello,World!");2.更换注释颜色和字体可分别为多行、文档、单行进行注释,在页面右侧选择bold、italic,点击颜色方框选择自己喜欢的颜色。单行注释//单行......
  • Java实现拼图小游戏
        Java中的图形化界面使用得是比较少的,但是可以用来结合前期学习的面向对象编程的思想,通过图形化的呈现,创造一个拼图小游戏。    主要用的到的包:importjavax.swing.*;importjavax.swing.border.BevelBorder;importjava.awt.event.ActionEvent;import......
  • 【科大讯飞笔试题汇总】2024-07-27-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/
    ......
  • 【JavaEE】阻塞队列
    目录一.阻塞队列(BlockingQueue)1.什么是阻塞队列2.特性二.生产者消费者模型1.什么是生产者消费者模型?2.生产者消费模型的好处2.1解耦合  2.2削峰填谷三.如何在java中使用阻塞队列 四.模拟实现阻塞队列1.加锁2.阻塞等待实现3.解决interrupt唤醒waitting问题4......
  • java开发,安装JDK8
    java开发,入职第一天都干什么,带你提前揭晓  2024.7.24,帝都今晚大雨,在雨声磅礴的夜晚适合干什么,没错适合敲代码,写博客,今晚来聊下入职一个新公司,第一天都干什么。无论是刚毕业的新手小白,还是工作十余年的职场老人,入职一家新公司,只要还是做研发,那么毫无疑问,在领到电脑后,第一件......
  • javascript(一)
    一、基本语法1.位置(1)JavaScript脚本必须位于<script>与</script>之间(2)<script>标签可以位于<body>或者<head>部分中2.输出语句(1)window.alter()弹出警告框(2)document.write()可以将内容在网页中打印出来,同时也会将原有的内容覆盖(3)console.log()可以将内容在......
  • java 集合框架-map(键值对集合)
    一、Map接口 (键值对集合)1.实现类(1).线程不安全HashMap1.特点:        ①无序          ②查找效率高:根据key,查找value2.数据结构:数组(哈希表)+链表(链地址法解决哈希表冲突)+红黑树(自平衡二叉树,提高查找效率)      ①数组(哈希表):Ha......
  • 三种语言实现高精度加法(C++/Python/Java)
    题目给定两个正整数(不含前导00),计算它们的和。1≤整数长度≤100000C++#include<bits/stdc++.h>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B){if(A.size()<B.size())returnadd(B,A);vector<int>C;......