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模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态的更多相关文章
- html 音乐 QQ播放器 外链 代码 播放器 外链 代码
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha QQ播放器 外链 代码 播放器 外链 代码 ======== 歌曲链接 QQ播放器 外链 ...
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
- FFmpeg简易播放器的实现-音频播放
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10068490.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...
- Android 仿百度网页音乐播放器圆形图片转圈播放效果
百度网页音乐播放器的效果 如下 : http://www.baidu.com/baidu?word=%E4%B8%80%E7%9B%B4%E5%BE%88%E5%AE%89%E9%9D%99& ...
- Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等
下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...
- android实现gif图播放、暂停、继续播放
之前做过一个项目,在android上实现gif图的播放以及点击屏幕弹出窗口显示gif图片的暂停,之前一直用gifView的jar包实现gif图片的显示,但是在gif暂停.继续播放这块没有找到好的解决方 ...
- EasyPlayer RTSP Windows(with ActiveX/OCX插件)播放器支持H.265播放与抓图功能
EasyPlayer作为业界一款比较优秀的RTSP播放器,一直深受用户的好评,经过了近3年的开发和迭代,从一开始的简单PC版本的RTSP播放功能,到如今支持PC(支持ocx插件).Android.iO ...
- flash播放器插件与flash播放器的区别
flash插件是一个网页ActiveX控件,而flash播放器是一个exe的可执行程序.前者用于播放网页中的falsh动画,而后者用于播放本地swf格式文件.
- java模拟DVD管理器
import java.util.*;import java.text.*;class DVDSet{ String[] name = new String[50]; //名字 int[] ...
随机推荐
- Java学习笔记--关于面向对象的思考
1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...
- hibernate课程 初探单表映射2-1 hibernate进阶 本章简介
本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置
- hibernate课程 初探单表映射1-11 通过hibernate API访问编写第一个小例子
hibernate 业务流程 1 创建配置对象 Configuration config = new Configuration().configure(); 2 创建服务注册对象 Service ...
- webpake-node-sass 报错
问题描述: npm run dev 就报错,在安装node-sass错误 解决方法 : 找到node_modules下的node-sass文件,进入,如果没有vendor文件夹,就创建一个空文件夹,命 ...
- h5新增属性本地存储
---恢复内容开始--- 存储的两种类型: localStorage 和 sessionStorage localstorage:没有时间限制的数据存储 sessionStorage 针对一个ses ...
- 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...
- Navicat for Oracle设置唯一性和递增序列
[数据库] Navicat for Oracle基本用法图文介绍 一. 设置唯一性 参考文章:Oracle之唯一性约束(UNIQUE Constraint)用法详解唯一性约束英文是Unique Con ...
- Python __builtin__模块
你有没有好奇过当我们打开Python后就可以直接使用str(),list(),eval(),print(),max()这样的函数,而不用导入任何模块? 其实原因很简单,就是当我们打开Python解释器 ...
- sql优化经典例子
场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据10 ...
- hive对有null值的列进行avg,sum,count等操作时会不会过滤null值
在hive中,我们经常会遇到对某列进行count.sum.avg等操作计算记录数.求和.求平均值等,但这列经常会出现有null值的情况,那这些操作会不会过滤掉null能呢? 下面我们简单测试下: wi ...