
Java
来自大山深处的Doge_
这个作者很懒,什么都没留下…
展开
-
轻音——基于Swing与JavaFX的音乐播放器
## 简介- **轻音**是一款我个人开发的支持本地和在线音乐的播放器,我制作这款软件的初衷也是为了消除不同平台之间版权的差异,让听歌不再“跨平台化”,实现听歌自由- **使用的技术**:**100% Java** 编程语言,**98% Swing** 开发GUI,**2% JavaFx** 作为播放器引擎- **开发历时**:断断续续也有**一年多**了## 下载地址[https://github.com/IceBearUniverse/LightMusic_release](https://g原创 2022-10-30 20:02:15 · 11543 阅读 · 17 评论 -
Swing mouseDragged事件判断鼠标是哪个键的方法
## 问题背景在使用`mouseDragged`处理拖动事件时,如果还想限定是鼠标哪个键,一般会想到以下方法```javatopBox.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { if (e.getButton() != MouseEvent.BUTTON1) return; ... }原创 2022-10-29 11:09:10 · 3093 阅读 · 0 评论 -
JavaFx Media如何传入请求头
做`JavaFx`程序的使用`Media`类的童鞋们也许会发现一个问题:我们通过如下的方法定义一个带`url`的网络媒体```javaMedia media = new Media(url);```但如果在请求`url`时我们还想加入一些`headers`才能请求成功,例如`referer`,怎么加呢?原创 2022-10-18 14:41:59 · 628 阅读 · 0 评论 -
将Jar包设置为开机自启
## 问题背景现有一个用Java打好的`.jar`文件,想让它开机启动## 解决方案- 在任一文件夹新建一个`.bat`脚本,这里暂且命名为`start.bat` - 用记事本打开它,复制进以下命令,其中`xxx.jar`改成你的jar的路径,最好是绝对路径...原创 2022-07-16 22:27:59 · 1806 阅读 · 0 评论 -
Swing使JPopupMenu背景透明
## 问题背景现在要使`JPopupMenu`背景完全透明,并且我想自定义它的背景,并且不影响它的菜单项的样式## 解决过程首先看到这个需求,按照基本思路是重写`JPopupMenu`类,重写`paintComponent`方法画一个背景。但是`JPopupMenu`与其他组件的自定义方法不同,它没有我们想象地那么简单,它是基于`Window`类的一个重量级组件,你会发现,即便是重写了该方法,并且什么也不做,依旧会有一个灰色的背景!并且`setOpaque(false)`依旧无效!...原创 2022-06-14 17:19:20 · 437 阅读 · 0 评论 -
Maven中央仓库连接不上的问题解决
Maven中央仓库连接不上的问题解决原创 2022-06-05 07:52:32 · 4111 阅读 · 0 评论 -
谈谈swing中JList选中第一项之后刷新极慢BUG的解决方案
当你使用JList时,不可避免从ListModel中增删数据,每次修改ListModel,JList会自动刷新,刷新过程很快,你几乎看不到元素一个一个加进去的过程,而是啪的一下很快啊!但是,当你选中JList中第一行的数据再去修改ListModel时,会发现刷新出奇的慢,你能清晰地看到数据一行一行慢慢增加;而奇怪的是,当你选中第2,3,4等其他行时,即使你有上万条数据,都是啪一下就出来了。swing的JList就是有这样一个bug,如何解决呢,我尝试过更新数据之前先清除选中,但无济于事list.cle原创 2021-01-05 11:22:38 · 416 阅读 · 0 评论 -
Swing界面实现全局抗锯齿
问题背景在用Swing开发一个GUI程序,对界面设置字体后无论怎样字体都会有严重的锯齿,例如下图的字体解决方案在初始化JFrame之前,先调用如下代码即可。注意:在初始化JFrame之前调用,在初始化JFrame之前调用,在初始化JFrame之前调用!!!否则不起作用!!!// 全局字体抗锯齿,必须在初始化 JFrame 之前调用!static voidenableAntiAliasing() { System.setProperty("awt.useSystemAAFontSettin原创 2022-02-02 15:14:44 · 1504 阅读 · 0 评论 -
Java对中文字符串按照拼音排序的思索
问题背景正在开发一个音乐播放器的项目,有个小功能是按照曲目的名称排序曲目,原理是按照compareTo方法去比较字符串大小,但是中文字符串排序出来是乱序的解决过程探索了compareTo方法,一下子就发现问题了,如图一般而言,中文我们是按照拼音进行排序,例如Windows系统中的文件“按照名称排序”就是这个原理。按理说“阿”应该在“波”之前,而compareTo却给出了相反的结果因此我们对中文排序时需要先将其转换为拼音,这里使用pinyin4j,依赖如下<!-- 中文转拼音 --&g原创 2022-01-10 14:08:37 · 1233 阅读 · 0 评论 -
Java判断文件编码的方式——使用第三方库cpdetector
问题背景我在使用Java开发一款音乐播放器,有个功能是读取本地lrc文件作为歌词,然而它们的编码方式不同,导致有的文件读取出来乱码,因此我需要能够在读取文件时判断编码的方法。解决过程网上有一个比较火的库——cpdetector,我先去maven远程仓库搜了一下,引入了依赖但是在重新导入时提示找不到包,错误信息如下找原因:看到下面一排小字,应该是说需要到对应的官网下载jar才能使用来到官网https://sourceforge.net/projects/cpdetector/files/后下原创 2021-12-30 12:57:33 · 4174 阅读 · 2 评论 -
Maven打包时报错class lombok.javac.apt.LombokProcessor (in unnamed module @0x3b8a0e68) cannot access class
在Maven打包时报错,完整错误信息是class lombok.javac.apt.LombokProcessor (in unnamed module @0x3b8a0e68) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.java原创 2021-12-27 06:43:44 · 16892 阅读 · 3 评论 -
Java 正则表达式 group 方法使用注意事项
有如下目标串和模式串目标串:10,20,30,40,50模式串:(\d+),(\d+)当我们去匹配该目标串时,第一个匹配到的大组应该是10,20,然后是10和20两个小组对吧?请务必在调用group之前调用find方法,相当于查找之后才会有组,否则会报错No match foundMatcher matcher = Pattern.compile("(\\d+),(\\d+)").matcher("10,20,30,40,50");matcher.find(); // 这一行必须有,否则原创 2021-07-02 10:33:57 · 831 阅读 · 0 评论 -
Java openConnection请求Json数据返回乱码问题解决
情形1:编码问题要么GBK要么UTF8new InputStreamReader(conn.getInputStream(), "UTF-8")new InputStreamReader(conn.getInputStream(), "GB2312")情形2:gzip压缩问题两种编码都不能解决,那么基本确定返回的json经过gzip压缩的问题,解决方案是封装到GZIPInputStream,然后将其read到byte数组,再转为String即可GZIPInputStream gis = ne原创 2021-06-13 21:46:25 · 1397 阅读 · 1 评论 -
Java切换电脑壁纸
思路就是调用cmd命令修改壁纸注册表和JNA更新壁纸显示,代码很简单void updateWallpaper(String filename) { Runtime runtime = Runtime.getRuntime(); try { // cmd 命令改变注册表壁纸路径 runtime.exec(String.format("reg add \"hkcu\\control panel\\desktop\" /v wallpaper /d \"%s\"原创 2021-06-13 21:32:19 · 785 阅读 · 0 评论 -
Java 实现连连看算法
连连看是个经典的小游戏,规则是:两图案相同的方块在2折以内的线连接下可以消除。里面的算法还是非常有趣,今天来研究一下。初始化棋盘假设有一个8*8的棋盘,我们要将其扩充至10*10,为什么?因为这样外围的连接就可以不用越界了。消除基本条件判断是否具备消除的基本条件有 3 个两个方块不能是同一个坐标两个方块必须是同种类型(图案)两个方块中不能有任何一个已经消除过的(消除过后的值用 mark 表示)// 判断是否具备消除的基本条件:两个方块不能是同一个坐标;两个方块必须是同种类型;两个方块中原创 2021-06-03 11:30:42 · 1888 阅读 · 7 评论 -
Java ImageIO.write保存的图片颜色异常的问题解决
问题背景:将专辑图片从程序中导出时,图片有些出现变红,变绿等异常现象。我发现只要是有alpha通道的图片都会出现问题,多半是ImageIO.write这个方法出了问题BufferedImage albumImage = player.getMusicInfo().getAlbumImage();ImageIO.write(albumImage, suffix.substring(1), outputFile);这看起来没什么问题,但是ImageIO.write确有这么一个隐藏的BUG,建议用第三方原创 2021-05-28 10:27:21 · 3672 阅读 · 8 评论 -
Java为MP3文件嵌入封面图片
问题背景:现在有一个没有封面的mp3文件,和封面jpg图片文件,将图片嵌入到mp3文件中作为封面。直接上代码示例/** * 为 MP3 写入封面图片 * * @param sourcePath * @param img * @return */ public static void writeMP3Image(String sourcePath, BufferedImage img) throws IOException, InvalidDataException, Unsup原创 2021-05-28 09:56:00 · 1283 阅读 · 0 评论 -
Win10系统Java安装与配置
这是老生常谈的话题了,你一次装好Java了,没准你下一次系统重装或换个电脑又忘了怎么弄,出于备忘,就写一篇记录Win10系统下Java安装过程。一、下载JRE并安装https://www.oracle.com/java/technologies/javase-downloads.html找到最新的JRE下载并安装二、找到JDK下载并安装JDK与JRE版本没有必然联系,你可以装最新的JDK,但推荐装JDK8就行了这是最新的JDK这是JDK8,选一个就可以了,如果有其他版本需求随便三原创 2021-04-24 09:35:27 · 436 阅读 · 0 评论 -
Java ForEach循环是定义新的变量对原对象的引用
ForEach循环的临时变量实际上只是定义了一个新的变量指向对象的引用,因此如果你希望更改对象的属性是可以的,看下面这个例子LinkedList<User> users = new LinkedList<>();users.add(new User("zhang"));for (User user : users) { user.setUsername("wang");}System.out.println(users);运行结果但在遍历时想直接替换整个对象原创 2020-12-01 13:25:41 · 2015 阅读 · 0 评论