Java模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态

java

package com.example.Thread;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.HashMap;

import java.util.Map;

/**

* Created by 达达队长 on 2018/4/28.

*/

class Count extends Thread {

private volatile int stop = 1;

public volatile int i = 0;

private JLabel count;

public Count(JLabel count) {

this.count = count;

}

@Override

public void run() {

try {

synchronized (this) {

while (true) {

if (stop == 0) {

wait();

} else if (stop == 1) {

count.setText(i++ + "");

} else if (stop == 2) {

return;

}

}

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

public void setStop() {

stop = 0;

}

public synchronized void setStart() {

stop = 1;

notify();

}

public void setKill() {

stop = 2;

}

}

public class MyTimer {

public static int lableSize = 1;

public static Map<JButton, Count> threadMap = new HashMap<JButton, Count>(16);

public static void main(String[] args) {

// 创建 JFrame 实例

JFrame frame = new JFrame("多线条启停");

// Setting the width and height of frame

frame.setSize(1080, 720);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

/* 创建面板,这个类似于 HTML 的 div 标签

* 我们可以创建多个面板并在 JFrame 中指定位置

* 面板中我们可以添加文本字段,按钮及其他组件。

*/

/*

* 调用用户定义的方法并添加组件到面板

*/

placeComponents(frame);

// 设置界面可见

frame.setVisible(true);

}

private static void placeComponents(final JFrame frame) {

final JPanel panel = new JPanel();

/* 布局部分我们这边不多做介绍

* 这边设置布局为 null

*/

panel.setLayout(new FlowLayout(FlowLayout.LEFT));

frame.add(panel);

// 创建登录按钮

JButton loginButton = new JButton("添加计数器");

loginButton.setBounds(10, 10, 80, 25);

panel.add(loginButton);

loginButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// 创建 JLabel

JLabel userLabel = new JLabel("计数器" + lableSize + ":");

userLabel.setBounds(10, 30 * lableSize, 40, 25);

panel.add(userLabel);

final JLabel count = new JLabel("0");

count.setBounds(100, 30 * lableSize, 40, 25);

panel.add(count);

final JButton button = new JButton("启动");

button.setBounds(200, 30 * lableSize, 80, 25);

panel.add(button);

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (button.getText().equals("启动")) {

Count thread = threadMap.get(button);

if (null == thread) {

thread = new Count(count);

threadMap.put(button, thread);

thread.start();

} else {

thread.setStart();

}

button.setText("暂停");

} else if (button.getText().equals("暂停")) {

Count thread = threadMap.get(button);

thread.setStop();

button.setText("启动");

}

}

});

final JButton kill = new JButton("停止");

kill.setBounds(300, 30 * lableSize, 80, 25);

panel.add(kill);

kill.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

Count thread = threadMap.get(button);

if (null == thread) {

} else {

thread.setKill();

System.out.println(thread.isAlive());

count.setText("0");

threadMap.remove(button);

button.setText("启动");

}

}

});

lableSize++;

frame.repaint();

}

});

}

}

以上是 Java模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态 的全部内容, 来源链接: utcz.com/z/393535.html

回到顶部