方法/其它教程
文章平均质量分 72
方法/其它教程
暗诺星刻
用心写好每一篇博客
展开
-
安卓 onActivityResult 废弃,registerForActivityResult 使用详解
registerForActivityResult 是 Activtity 的一个方法,它可以生成一个对象,该对象的 launch 方法可以启动一次 Activtity 调用流程。该对象可以启动一个 Activtity 并与之绑定,这样,将这个启动的 Activtity 回传时,接收回传数据的代码就无需使用请求码了。可以向 launch 提供一个实参来表示本次 Activtity 调用流程的输入。这个输入可以是任意类型,也可以为 null。// 这里的 this 指向的是一个 Activity。原创 2024-01-11 05:34:10 · 7070 阅读 · 0 评论 -
在 SQL 中,当复合主键成为外键时应该如何被其它表引用
而很奇妙的是,表 User、Folder 和 Contact 都有一个形同“userId”的字段,而且,它们的这个字段的意义是相同的。在 MySQL 中,如果建表时错误地将上述表 Contact 中的 userId 引用了表 User 中的 id,MySQL 并不会抛出错误,因为 MySQL 关于这方面不太严谨。因为 User 的主键不是复合主键,而且表 Contact 已经通过属性 linkedUserId 引用了表 User 的主键 id,因此不需要强制引用 User 的其它属性。原创 2023-11-14 01:08:49 · 5105 阅读 · 0 评论 -
安卓疑难布局问题解决:仿微信对话框中,如何控制对话框的文本自适应且各组件不超出父组件
在安卓组件 XML 布局中,有时候会遇到较复杂的约束关系。比方说,对于下面这个消息对话框中的消息文本,希望它可以文本框大小自适应,且在各组件先后位置确定的情况下,各组件都不超出父组件。限定只能使用 XML 来完成这一功能。如下图所示,当文本只有一行时,文本框的宽度自动调整至正好包裹文本。如下图所示,当文本有多行时,文本框的宽度存在一个最大值,且不会将其它组件挤出屏幕外。文本框的高度则伸长至正好包裹文本。有些读者可能很敏感,没错,这就是高仿微信的消息对话框。当然,实际上的对话框,其左边的背景是白色的,这里为了原创 2023-09-04 00:57:11 · 175 阅读 · 0 评论 -
如何在 Spring Boot 中集成日志框架 SLF4J、Log4j
因为 Spring Boot 已经内置了 Logback,所以需要先将 Logback 移除。移除的方法是在 Spring Boot 依赖包中移除 Logback。引入与 Spring Boot 适配的 Log4j2 依赖包。原创 2023-08-08 23:46:34 · 3277 阅读 · 0 评论 -
如何把一个 Git 仓库的分支加入另一个无关的 Git 仓库
笔者需要将两个无关的 Git 仓库合并,也就是把一个 Git 仓库的分支加入另一个无关的 Git 仓库。但旁仓库可以是远程服务器上的,也可以是本地的,不需要下载到本地。在 TortoiseGit 填写旁仓库的仓库地址,旁仓库的地址可以是远程服务器上的,也可以是本地的。称吸收另一个无关 Git 仓库的 Git 仓库为。直接将旁仓库的分支签出,即可吸收旁仓库的分支。可以看到,在主仓库中显示出了旁仓库的分支。现在,主仓库就同时把旁仓库的分支。在主仓库读取旁仓库的分支目录。Windows 10 教育版。原创 2023-06-19 04:02:32 · 1562 阅读 · 0 评论 -
安卓中如何获取状态栏和标题栏的高度
指的是应用实际显示的面积。它不包含状态栏,但包含标题栏。而且,这个值是会随应用显示的面积的改变而改变的。比如,当文本框需要输入时,如果弹出了输入法,则。指的是整个屏幕的尺寸。这个尺寸通常是不会变的,且就是手机厂商对外公布的手机屏幕大小数据。它包含状态栏、标题栏和内容区域。安卓的屏幕显示区域分为三个嵌套的部分,依次为。它不包含状态栏、标题栏。下面给出求这几个尺寸的方法。的高度值会减少输入法的高度。原创 2023-05-08 04:02:08 · 732 阅读 · 0 评论 -
安卓中如何获取输入法的高度
如果在当前视图使用了 RecyclerView,则在键盘弹出之后,不是正好出现在光标的下面,而是出现在整个屏幕的下面。但如果没有使用 RecyclerView,则在键盘弹出之后,如果遮住了文本框,会正好出现在光标的下面。在键盘弹出之后,如果键盘会遮住触发键盘的文本框,则系统会将此应用界面向上推动,直到正好能显示出这个文本框。具体来说,其纵坐标都会减少界面向上移动的距离,这个距离最大可为键盘的高度。在键盘弹出之后,计算应用尺寸(不含状态栏)的大小时,系统的 API 会减去键盘的高度。原创 2023-05-04 04:31:52 · 1970 阅读 · 0 评论 -
在 Java 中,如何创建泛型对象与泛型数组
很多人应该很清楚,在 Java 中,是不能直接创建泛型对象和泛型数组的。原因是 Java 有类型擦除,任何泛型类型在擦除之后就变成了 Object 类型,因此创建泛型对象就相当于创建了一个 Object 类型的对象。创建 Object 类型的对象通常没有任何意义,所以直接创建泛型对象的行为被编译器禁止。泛型数组也是一样。原创 2022-09-16 05:37:46 · 9438 阅读 · 2 评论 -
在 Java 中,如何批量读取本项目资源目录下的所有文件
在 Java 中,如何批量读取本项目资源目录下的所有文件读取资源目录下的指定文件方法 1:使用 JDK 中原始 API方法 2:借助 Spring附录将 InputStream 转化为 byte 数组将 File 转化为 byte 数组将 byte 数组转化为 InputStream 今天笔者遇到一个需求,如何读取本项目资源目录下的所有文件。读取资源目录下的指定的文件很容易,这只需要给出路径即可。读取资源目录下的指定文件/** * 方法 getResourceAsStream 的路径是以资源目录原创 2022-03-07 00:24:06 · 6351 阅读 · 0 评论 -
如何使 React 中的 useEffect、useLayoutEffect 只调用一次
如何使 React 中的 useEffect、useLayoutEffect 只调用一次 Hook 是 React 16.8 的新增特性,旨在替代原来 React 中的 Class 组件。React 官方已经对使用 Class 组件采取了负面态度(见此处)。虽然目前官方仍然明确声明“没有计划从 React 中移除 class”(见此处),但待 Hook 成熟之后,Class 组件语法被废弃恐怕是迟早的事情。 useEffect、useLayoutEffect 可用于替代 Class 组件生命周期的方原创 2022-03-06 01:40:48 · 3538 阅读 · 0 评论 -
如何在 CSS 中设置组件在浏览器屏幕水平垂直居中
如何在 CSS 中设置组件在浏览器屏幕水平垂直居中 在 CSS 中设置组件在浏览器屏幕水平垂直居中可分解为两个问题,一是设置组件在其父组件的水平垂直居中,二是让其父组件铺满整个屏幕。 对于让最外层组件铺满整个屏幕,这需要将其宽高均设置为 100%。不过这样做了会导致浏览器出现水平和垂直的滑条。这是因为元素 body 会默认有一定的边距 margin,一般为 8px,所以同时还要将元素 body 的边距 margin 设为 0。 对于让组件在父组件中水平垂直居中,方法有很多,这里选择 flex 布原创 2022-03-05 00:20:52 · 1594 阅读 · 0 评论 -
在 Markdown 中,如何在反引号对语句中使用反引号
在 Markdown 中,如何在反引号对语句中使用反引号 在 Markdown 中,经常会使用一种反引号对语句来标识一段 特殊文字,如 `特殊文字`。不过,有时候 特殊文字 中也会含反引号。显然,如果在 特殊文字 内直接使用反引号, Markdown 渲染器会优先匹配最近的一对反引号,这会导致渲染器的误解析。那么,如何在反引号对语句中使用反引号呢? 方法是,将原来的 反引号对 改成 二反引号对 + 空格。比如,如果原来的语句是 【`特殊文字`】,现在,特殊文字 中将含有反引号,此时的语句应改成 【原创 2022-03-03 00:36:21 · 2734 阅读 · 0 评论 -
如何验证 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题及其原因
如何验证 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题及其原因验证的流程自助验证为什么 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题 很多人都知道,MySQL 的 InnoDB 在事务隔离级别 REPEATABLE READ 下解决了不可重复读的问题,但是依然有幻影行问题。不过很多人都不知道这是为什么,也有很多错误的解释与验证。 下面开始验证。首先要区分两个概念,正在观察的事务、其它事务。正在观察的事务指的是用于界定事务是否发生幻影行的事务,正在观察的事务只存在一个。原创 2022-02-06 01:25:19 · 257 阅读 · 0 评论 -
Java RMI 入门
Java RMI 入门如何通信实战 Java RMI 指 Java 中远程方法调用(Remote Method Invocation)。通过 Java RMI,可以直接在客户端调用服务端的方法,并获得其返回值。Java RMI 是 RPC(Remote procedure call) 技术的 Java 实现,它提供了一种非常便捷的方式在 Java 中实现 RPC。 使用 RMI 之前,需要知道以下概念:服务端服务端的暴露方法客户端 RMI 可以让客户端调用位于服务端的暴露方原创 2022-02-02 01:19:36 · 1418 阅读 · 0 评论 -
Java 函数式编程与事件驱动模式
Java 函数式编程入门函数式编程实战改进 像 JavaScript 这种语言很早就支持闭包了,虽然 C++ 很早就有了函数指针,Java 也很早就提供了反射中的 Method 类,不过使用它们都不能算是真正的函数式编程(面向函数编程)。原因它们还不够方便和优雅。编程语言是为人类设计的语言,如果仅仅为了可实现,那任何编程思想、设计模式、架构模式都没有意义。 Java 从 Java 8 开始支持 lambda 表达式,这才算是支持函数式编程。函数式编程有什么好处呢?如果将其与依赖注入技术结合,可以很好原创 2022-02-01 03:08:59 · 2206 阅读 · 0 评论 -
GitLab初次安装后,登录GitLab网页的管理员账号和密码各是什么?
GitLab初次安装后,登录GitLab网页的管理员账号和密码各是什么? 在安装完启动 GitLab 后,应该就可以在网页上访问到 GitLab 的登录界面了,不过 GitLab 已事先创建了一个账号了,这个账号就是管理员账号。即便是注册新 GitLab 账号,也需要登录管理员账号进行审批。那么这个管理员账号和密码各是什么呢? 这个管理员账号的账号名为 root,而密码在一个自动生成的文件 /etc/gitlab/initial_root_password 中(密码不会含空格),且会在 24 小时后原创 2022-01-03 23:45:27 · 26314 阅读 · 1 评论 -
简易 IM 双向通信电脑端 GUI 应用——基于 Netty、WebSocket、JavaFX 、多线程技术等
使用 Netty 技术、WebSocket 协议、JavaFX 客户端进行双向 IM 通信的 demo 项目说明运行效果核心代码源代码参考知识说明 这是一款使用 Netty 来实现 IM 双向通信的 demo 项目。 通信双方互为发送方、接收方。通信双方均使用 WebSocket 协议。 通信双方的客户端 GUI 界面均是使用 JavaFX 来实现的。在该文本框中,可以点击 发送 按钮来发送消息,也可以使用 Enter,而在文本中另起一行需要使用组合键 Ctrl + Enter 来完成。原创 2021-12-21 02:05:13 · 702 阅读 · 0 评论 -
简易 IM 双向通信电脑端 GUI 应用——基于 Netty、JavaFX、多线程技术等
通信时可以传输Java对象,而不限制为简单的文本数据。在发送端、接收端可以借助传输载体,通过对Java对象的序列化和反序列化来实现对Java对象的透明传输。这是一个使用Netty来实现IM双向通信的demo项目。通信双方的客户端GUI界面均是使用JavaFX来实现的。通信双方的通信是使用Netty来实现的,已解决Netty传输过程中的半包、粘包问题。通信过程是由其它线程在后台完成,不会阻塞UI线程。实现对Java对象的透明传输。按钮来发送消息,也可以使用。......原创 2021-12-13 01:55:06 · 638 阅读 · 0 评论 -
在 JavaFX 中,如何计算文本所占像素的宽度
在 JavaFX 中,如何计算文字所占像素的宽度注意事项算法代码计算单行文本的像素宽度计算文本框尺寸 JavaFX 的恼人之处在于很多基本的操作都要自己亲力亲为。有些时候,我们希望 TextArea 能自动根据文本内容换行以及调整大小。换行是 TextArea 中已经有的功能,不过这也带来了新的问题。在 JavaFX 中,可以使用 Text 类的方法 Text对象.getBoundsInLocal().getWidth() 测得文本的基本尺寸。不过,依然有很多要注意的问题。【注意】 不同的符号的原创 2021-11-25 05:56:43 · 1312 阅读 · 1 评论 -
如何在 JavaFX 的 TextArea 实现回车发送信息而不换行,但组合键 Ctrl + Enter 换行
在onKeyPressed的回调方法中,当用户输入的是普通的按键时,光标的位置为输入该字符之前的位置(刚刚输入的字符尚未在文本框中生效)。这意味着,如果输入的是Enter,则当onKeyPressed的回调方法触发时,文本框中不仅包含换行符,而光标在该换行符之后。这意味着,在按下但不松开Ctrl键之后,输入Enter时,输入的文本不会包含换行符,因为TextArea不认为此时输入的是Enter。但如果依次按下(不松开)对于Enter,需要清除换行符,而输入的换行符位于光标的左边。...原创 2021-11-24 02:15:39 · 4122 阅读 · 3 评论 -
LocalDateTime 的常用操作
LocalDateTime 的常用操作判断两个 LocalDateTime 是否是同一天判断一个 LocalDateTime 是否是今天将 Date 对象转化为 LocalDateTime 对于日期时间,一直困扰着很多编程语言和开发者。要怪就怪地球公转与自转的规律如此不协调以及人类为什么发明出这么多不相容的历法。对于 Java,很早以前就有了很多描述日期、时间的类了,如 java.util.Date、java.util.Calendar 等。现如今,最好使用 java.time.LocalDateTim原创 2021-11-23 02:25:48 · 3864 阅读 · 0 评论 -
如何联网获取北京时间
如何联网获取北京时间Java 联网获取时间的目的是为了保证获取到的时间的正确性与安全性。当然,如果有了个人的服务器,也可以选择直接让服务器来提供时间。这里假设没有这种途径。Java 对于 Java,可以使用如下办法。不过要注意,这个办法获得的时间只能精确到秒,且在笔者的 Windows 上,对于一个线程,此方法在 1s 中只能执行大约 10 次,因此还有运行效率的问题。/** * @throws IOException 如果不能联网,将会抛出此异常 */public static Date原创 2021-11-22 00:34:48 · 977 阅读 · 0 评论 -
如何反复读取同一个 InputStream 对象
如何反复读取同一个 InputStream 对象方法 1方法 2 我们知道,每次从 InputStream 对象中读取数据后,其当前读取位置的指针就会发生移动。如果在读取完的某时还想重新从此 InputStream 对象中读取数据,但此指针已到尽头,因此无法做到这一点。另外,InputStream 还不支持克隆,这意味着也不能事先备份这个 InputStream 对象。不过,这并不是没有办法。方法 1 如果使用的 InputStream 对象支持方法 mark,可以联合方法 reset 来进行 I原创 2021-11-17 02:21:01 · 1903 阅读 · 0 评论 -
如何在 IntelliJ IDEA 中快速生成 JavaDoc 注释模板
使用 IntelliJ IDEA 中的实时模块可以快速生成 JavaDoc 注释。方法如下:(IntelliJ IDEA 在 2021 年之后的版本已经以插件的形式给出了 IntelliJ IDEA 的官方汉化版。因此本博客中 IntelliJ IDEA 的界面为中文版界面。之后,就可以立即生成前面设置的 JavaDoc 了。之后,也可以立即生成前面设置的 JavaDoc 了。此动态模板的原理是,如果设置了上述动态模板的。的名称可以任意起,只要不与已有的重复即可。选择此模板的生效场合。原创 2021-10-26 03:37:38 · 5396 阅读 · 0 评论 -
优化 UI 应用启动时间的方法
优化 UI 应用启动时间的方法优化 UI 应用启动时间的方法:懒启动:将与启动主界面无关的代码安排到启动之后再执行。可以使用多线程技术来低耦合地达到这一点。UI 代码与非 UI 代码分离:将与 UI 界面元素显示无直接关系的代码从 UI 线程 中剥离。不要将这些代码放到 UI 线程、UI 线程安全函数 中执行,应该新建线程来执行这些无关代码。锁粒度检查:减少上锁的个数、次数与粒度。能用 volatile 就不要用锁,能锁局部就不要锁方法。使用 Thread.sleep(0)原创 2021-10-20 01:02:47 · 126 阅读 · 0 评论 -
JavaFX 中使用多线程与保证 UI 线程安全
JavaFX 中使用多线程与保证 UI 线程安全JavaFX 中使用多线程JavaFX 中保证 UI 线程安全总结与补充 JavaFX 中的 UI 和大多数其它的编程语言一样,是单线程的。前人很早就已经多次尝试在 UI 上使用多线程,大多都已失败告终。为保证 UI 界面的流畅,UI 线程不能执行非常耗时的操作。如果 UI 线程执行正在非常耗时的操作,这个后果在 UI 界面的体现就是,UI 界面会一直停滞在执行耗时前的状态,然后此时如果马上多次随意点击 UI 界面的任何部位,此时会发生如下现象:应用的原创 2021-10-14 01:34:15 · 6851 阅读 · 0 评论 -
在 IntelliJ IDEA 中,如何快速将选中文件用资源管理器打开
在 IntelliJ IDEA 中,打开资源管理器显示选中文件很简单,只需要选中文件,然后对选中文件进行右键单击。如果读者的 IntelliJ IDEA 中已经有了工具条,可以忽略此步。上下移动,调整到合适的位置。如果调整到了合适的位置,删去工具栏后,该按钮应该还在。如果不喜欢展开的工具栏,可以用开始的方法将其删去。不见了,这时需要刚刚的方法,打开工具栏的弹出菜单,然后将选项。右键单击工具条的空白部分,然后选择。在弹出的菜单中按图示点击,最终选择。【2023年2月26日 更新。在弹出的菜单中按图示点击。原创 2021-09-05 04:09:03 · 1998 阅读 · 0 评论 -
在 Java 中,使用反射来创建对象、创建数组、调用方法
使用反射来创建对象、调用方法 假设已有下面的类:import java.lang.reflect.InvocationTargetException;public class Test { public Test() { } public Test(A paraA, B paraB) { System.out.println("构造器 Test(A paraA, B paraB) 被调用。"); System.out.println("原创 2021-07-15 01:24:43 · 1401 阅读 · 0 评论 -
在 Java 中,类、类对象、泛型之间的转换
Java中,类、类对象、泛型之间的转换R为非泛型获得类通过类型名来获得类通过对象来获得类通过类名字符串来获得类通过类来获得类名字符串通过类来获得对象使用R的无参数构造器来创建对象使用R的有参数构造器来创建对象T为泛型通过泛参来得到Class对象通过泛参来创建实例对象通过泛型非空引用来得到Class对象通过Class对象来得到泛参通过Class对象来创建实例对象使用T的无参数构造器来创建对象使用T的有参数构造器来创建对象R为非泛型 这里说的类是指某个对象所属的类所对应的类Class<?>的对原创 2021-02-21 01:03:31 · 12202 阅读 · 0 评论 -
将 C++ 中的 goto 语句转化为非 goto 语句
将C++中的goto语句转化为非goto语句 goto语句是公认的被编程语言支持但不建议使用的语句。一方面,在某些时候使用goto语句能增加代码的可读性,降低其复杂性。另一方面,goto语句将增加代码的耦合性,对于大型应用的开发将带来诸多弊端。绝大多数人对使用goto语句持反对意见。另外,在学术上,Corrado Böhm及Giuseppe Jacopini从理论上证明了:任何程序都可以用顺序、分支和重复结构表示出来。这个结论表明,从高级程序语言中去掉goto语句并不影响高级程序语言的编程能力,而且编写原创 2021-02-20 00:09:00 · 608 阅读 · 0 评论 -
配置 Windows 环境变量的方法
设置Windows环境变量的方法设置Windows中的环境变量是为了某些命令在CMD中可以被识别以及用于多应用之间的交互。设置Windows环境变量的具体操作流程如图(请顺着图片用鼠标点击画红圈部分),下面以环境变量Path为例:...原创 2021-02-02 00:04:42 · 96588 阅读 · 0 评论 -
如何查看 JSP 和 Servlet 的版本
如何查看JSP和Servlet的版本说明获得JSP和Servlet的JAR包JSP的版本号Servlet的版本号注意事项&附录说明 进行这个教程之前,需要先获得JSP和Servlet的JAR包。获得JSP和Servlet的JAR包对于不同的场景,上述获得JSP和Servlet的JAR包的方式不同,这里以Tomcat为例。JSP和Servlet的JAR包一般在Tomcat的lib文件夹,即路径 Tomcat的安装路径\lib 。在lib下找到 jsp-api.jar 和 servl原创 2021-01-17 16:06:16 · 3324 阅读 · 0 评论 -
JavaMail的下载配置教程
JavaMail的下载配置教程JavaMail的下载activation.jar的下载JavaMail使用前的准备步骤设置类路径&导入到IDE中JavaMail的下载首先,需要去oracle官网下载mail.jar,这个文件被放在一个压缩包里面供下载。目前可以跳转至最新的JavaMail的网址有很多,比如: https://www.oracle.com/java/technologies/javamail-api.html https://www.oracle.com/java/tec原创 2020-12-28 10:27:10 · 5337 阅读 · 1 评论 -
MySQL 驱动的下载方法
MySQL驱动的下载方法说明步骤说明 在使用配合其他语言的编程软件时,有可能需要在那些软件上添加MySQL的库文件,这些文件也是在MySQL官网下载。这里以Java编程所需的MySQL文件为例。步骤进入MySQL官网,网址:https://dev.mysql.com/downloads/以Java IDE编程所需的文件为例,需要选择其中的免安装文件(压缩包形式)进行下载。下载之后,将得到一个压缩文件,如 mysql-connector-java-8.0.21.zip ,解压该原创 2021-01-01 00:53:20 · 27332 阅读 · 0 评论 -
Java 库文件的添加教程
Java库文件的添加教程准备步骤和注意事项设置类路径导入到Eclipse中导入到IntelliJ IDEA中准备步骤和注意事项前提是你已经有了需要添加的库文件,一般是jar文件。本教程以mail.jar、activation.jar的添加为例,而这两个jar文件是JavaMail的依赖包。如果读者想了解JavaMail的下载配置全过程,请见笔者的另一博客:暂缺,以后补上你需要把需要添加的文件放到以后不会删除的任意位置,比方说,放到当初的JDK安装路径附近,如:C:\Program Files\原创 2020-12-27 02:44:11 · 11274 阅读 · 0 评论 -
如何将 SWF 文件添加到 PPT 的每一张幻灯片
将SWF文件添加到PPT每一张幻灯片的教程说明前期准备工作具体步骤说明本教程使用的Office以Microsoft Office 2013 (64位)为例本教程使用的SWF文件以一个SWF实时时钟文件为例前期准备工作 需要一个已经下载好的SWF文件。此文件如果没有损坏的话,应该可以在一些flash player播放器中直接运行。具体步骤将SWF文件与目标PPT放到同一个文件夹中打开目标PPT,依次点击视图、幻灯片母版之后选择第一个模板幻灯片在右上方空白处点击右键原创 2020-12-20 19:22:15 · 1717 阅读 · 0 评论