Sunday, 24 of October 2043
12°C
Saturday, 25 of October 2043
18°C
Monday, 26 of October 2043
25°C
Wednesday, 28 of October 2043
10°C
Tuesday, 27 of October 2043
20°C

Sorry, but your browser does not support WebGL!

视频播放器的快捷键模块

一个视频播放器的设计与实现系列(四)

终于到了系列的最后一篇文章,今天我们将引入快捷键模块。 JavaFX 支持两种快捷键机制,一种是 Mnemonic,另一种是 Accelerator。 前者名字不熟悉,它是什么呢?如果你正在用 VSCode、IDEA 等常见的 GUI 软件,不难发现菜单栏上有“文件(File)”、 “帮助(Help)”等菜单,现在按下“Alt+F”,发生了什么,是不是文件菜单打开了,就像你点击了它一样,...

视频播放器的菜单栏

一个视频播放器的设计与实现系列(三)

在系列的上一篇文章中,我们加入了组件 MediaScreen 与 ControlPanel,今天我们将继续加入菜单栏(MenuBar)。 同样的,我们把菜单栏设计为 Spring 的 Component。为此,我们自己设计一个 MenuBar 类,继承自 JavaFX 的 MenuBar 类, 但是增加了 @Component 注解与自定义的 Menu。 @Component publi...

视频播放器的组件化设计

一个视频播放器的设计与实现系列(二)

在系列第一篇文章中,我们制作了播放器的雏形。但是可不是能放视频的就能称为播放器呢,至少要有 选择媒体文件、播放暂停控制、进度条控制等功能才行吧。今天我们就来加入一些组件。 让我们以 vlcj-player 为例,看一看一个播放器需要哪些组件。 最上面是一个菜单栏(MenuBar),通用的控制选项就分类地放在上面。接着是播放器界面的主体 MediaScreen。最下面则是 提供快捷功能...

让我们设计一个视频播放器

一个视频播放器的设计与实现系列(一)

如题,今天我们要开始设计一个视频播放器(当然它也能播放音乐),主要用来熟悉 Spring Boot。 既然是冲着 Spring Boot 去的,语言必然用 Java;核心的视频播放功能 则选择 vlcj,一个 libvlc (你应该知道大名鼎鼎的 VLC 播放器 吧)的 Java 绑定库;Java 的 GUI 框架毫无疑问只能选 JavaFX,而根据 vlcj 所述, JavaFX 13 ...

深入 Git

《Git 权威指南》读书笔记

基本概念与模型 Git 是分布式版本控制系统(Distributed Version Control System),每个用户都能在本地维护自己的版本, 多个用户也能协同开发。下面介绍单用户 Git 的基本概念与模型。 使用 Git 的项目在根目录下会有一个 .git 目录,它是这个版本库的核心。若想备份一个版本库,只需把这个目录拷贝一份。 其典型结构如下: config descri...

RocketMQ 笔记

分布式软件设计

使用量大的业务通常由多台服务器(数据库服务器、缓存服务器、计算服务器等)配合支持。服务器间的配合离不开通信。 通常我们使用这样的模型描述它们间的关系:一组同构的服务器为生产者(Producer), 另一组为消费者(Consumer),它们间的通信称为消息(Message)。消息的传递一般有两种模式:推式(PUSH)与拉式(PULL)。 无论是哪种,都要求其中一组事先知道另一组的位置以主动与其...

SLF4J 探秘

SLF4J 设计与实现

SLF4J 指的是 Simple Logging Facade for Java,其中的 Facade 指的是门面模式(或者叫外观模式)的门面。 为什么要设计这样的门面呢?我们知道,日志模块是大多数 Java 程序必备的模块,而日志的实现可以有很多种, 比如有的日志注重持久性,会频繁刷写数据到磁盘上;还有的日志支持对接数据库等。一个项目可能会根据需求变化中途 更改日志实现,多个项目也可能会使...

详解自旋锁

Java 并发原理系列(三)

系列上一篇文章中提到了 AQS 的队列部分基于 CLH Lock 的变种实现,但是原文并未详细介绍 CLH Lock, 所以本篇文章介绍一下原始的 CLH 锁以作补充。但是本篇文章的内容不止于此,如标题所示,我们将整体地讨论自旋锁, 看看 CLH 锁是如何一步一步的被引入的。 缓存一致性协议 当前主流的多核处理器均采用了共享内存:不同的核心共享相同的内存资源。然而由于访问内存耗时较长,共...

AQS 框架论文翻译 —— The java.util.concurrent Synchronizer Framework

Java 并发原理系列(二)

原论文地址:http://gee.cs.oswego.edu/dl/papers/aqs.pdf 这是了解 JUC 的 AbstractQueuedSynchronizer 必读的论文,论文作者是 JUC 设计者————大名鼎鼎的 Doug Lea。 文中讨论了 AQS 的设计目的、思路与实现,不仅对于了解 JUC 有作用,还有助于体会程序设计的思想。本来想自己翻译的, 但是惊喜地发...

Synchronized 底层原理

Java 并发原理系列(一)

synchronized 是 Java 中加锁的关键字,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程可以执行这段代码。 另一个线程必须等待当前线程执行完以后才能开始执行。然而,当一个线程访问实例的一个加锁代码块时, 另一个线程仍可以访问该实例中的非加锁代码块。 synchronized 关键字主要有以下 3 种应用方式: 修饰实例方法(method of inst...