java多线程和GUI实现抽奖界面

这个博客展示了如何运用Java的多线程和GUI组件创建一个抽奖界面。程序包含一个主线程和一个子线程,通过wait()和notify()方法实现抽奖的暂停与继续功能。用户点击开始按钮后,界面将随机选取手机号并显示中奖信息。
摘要由CSDN通过智能技术生成
  • 运用多线程和GUI制作一个如下图的抽奖界面,随着点击按钮,开始随机选取手机号作为中奖用户。
  • 要用到两个线程,一个主线程,我们在创建一个子线程,使用wait()和notify()方法休眠与唤醒来实现抽奖时的暂停与继续。

运行界面:

点击开始,进行随机选号:

代码展示: 

package multithreading;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class Lottery extends JFrame {
    private JLabel l,l2;
    private JButton b;
    String []number={"18109780525","18290450569","13145678954","13596352525",
                    "12378984911", "12768738812", "18395678910", "17842365714",
                    "15699569782","17699818998","18044659078","18799870521"};
    public Lottery(){

        this.setTitle("手机号抽奖");

        this.setBounds(550,100,500,300);

        this.getContentPane().setBackground(Color.LIGHT_GRAY);

        l=new JLabel("随机摇号");
        l2 = new JLabel("中国体育彩票");

        l.setHorizontalAlignment(SwingConstants.CENTER);
        l2.setHorizontalAlignment(SwingConstants.CENTER);

        l.setForeground(Color.RED);

        l.setFont(new Font("宋体",Font.PLAIN,62));
        l2.setFont(new Font("黑体",Font.PLAIN,22));

        b=new JButton("开始");

        this.add(l,BorderLayout.CENTER);
        this.add(l2,BorderLayout.NORTH);
        this.add(b,BorderLayout.SOUTH);

        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        myThread t=new myThread();

        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String str = b.getText();

                if (str.equals("暂停")) {

                    t.changeflag1();
                    b.setText("继续");

                } else {
                    b.setText("暂停");
                    t.changeflag2();
                }
            }
        });
        t.start();
    }
    class myThread extends Thread{

        boolean flag=true;

        public synchronized  void changeflag1(){

            flag=true;
        }

        public synchronized  void changeflag2(){
            flag=false;
            notify();
        }
        public  void run(){
            do {
                synchronized (this) {
                    while (flag) {
                        try {
                            wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
                int i = new Random().nextInt(number.length);
                String name = number[i];
                l.setText(name);
                String substring = name.substring(name.length() - 4);
                l2.setText("恭喜尾号为:"+substring+"的用户,获得年度最佳鼓励奖。");
            } while (true);
        }
    }
    public static void main(String[] args) {

        new Lottery();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan木子李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值