IntelliJ平台知识集锦
IntelliJ是JetBrains公司的一个基础软件平台,主要用于构建IDE。IDEA、WebStorm、PHPStorm、CLion、PyCharm、RubyMine、DataGrip、Android Studio等IDE均基于此平台构建。本文记录通用于这些IDE的知识。
IntelliJ中在编辑器左侧、下面、右侧的若干小面板,被称为工具窗口。工具窗口名字前面可能有N: 前缀,你可以使用Alt + N快速切换到此工具窗口。
大部分工具窗口支持快速搜索(Speed Search)功能,你只需要聚焦目标工具窗口,然后直接输入你需要搜索的内容,即可定位到匹配条目。
IntelliJ引入视图模式这一特性,允许IDE以不同方式呈现:
视图模式 | 说明 |
Full Screen mode | 全屏模式,占据最大的空间。操作系统任务栏、菜单栏等自动隐藏 |
Presentation mode | 演示模式,类似于全屏模式,字体很大,用于投影展示 |
Distraction-free mode | 免打扰模式,仅仅居中显示代码,工具窗口、工具栏、编辑器标签都隐藏 |
IntelliJ支持比较智能化的代码提示(Code Assist),在你输入的时候匹配的候选代码提示会自动出现。匹配方式不仅仅限于前缀,不连续的字符也可以用于筛选匹配,例如输入mtm可以匹配myTestMethod方法。
对于JavaScript等动态语言,IntelliJ可以分析得到工程中所有的变量、函数名称,用于代码提示,而不考虑代码的上下文,例如:
1 2 3 4 |
var cmp = null; // 输入到cmp.init,IDEA即可给出initRenderData提示,这是因为在工程的某个文件中定义了initRenderData()方法 // 尽管从山下文判断,此提示是不正确的 cmp.initRenderData(); |
这种提示方式很有效,特别是在记不清函数名称的时候,但是工程中代码过多时,IntelliJ会消耗大量时间分析代码,造成卡顿。
IntelliJ支持独特的Postfix自动完成,你可以输入 false.if 来得到 if(false){} 。
IntelliJ支持自定义模板代码,这些代码可以插入到当前编辑器中,或者环绕当前编辑器中被选中的代码。
要自定义LiveTemplate,可以Settings ⇨ Editor ⇨ Live Templates,然后点击右侧的按钮添加新的模板。你可以为模板设置一个缩写,这样,在编辑器里输入缩写后,按Tab即可自动完成。
要插入模板,可以使用Intellij的智能提示,或者使用快捷键:Ctrl + J、Ctrl + Alt + J。
预定义变量:
变量 | 说明 |
$SELECTION$ | 代表当前编辑器的选区 |
$END$ | 代表光标位置,在插入模板后,光标将停留于此 |
Live template的强大之处在于,它允许你自定义模板变量,变量的值可以从IntelliJ提供的大量函数中推导出。这样,你就可以很方便的在模板在插入上下文信息,例如类名、方法名、当前时间等信息。例如下面的Live template,它可以向当前Java类中插入日志记录器的声明语句:
设置路径 | 说明 |
A&B ⇨ Apperance |
UI Options |
A&B ⇨ System Settings | Synchronization 勾选Save files automatically if application idle for 15 sec ⇨ Updates 取消勾选 Automatically check updates for .. ⇨ Usage stat. 取消勾选 Allow sending usage statistics to JetBrains |
A&B ⇨ Path Variables | MAVEN_REPOSITORY Ubuntu下设置为~/JavaEE/maven/maven_repository Windows下设置为D:\JavaEE\maven\maven_repository |
Keymap |
考虑到需要使用多套IDE、操作系统,过度差异的快捷键容易造成记忆混乱,因此选择Keymaps为Eclipse,并在其基础上做调整 添加以下快捷键: |
Editor ⇨ General |
Other Appearance Code Completion |
Editor ⇨ Colors & Fonts |
Scheme另存以便修改 Ubuntu下使用GTK+主题时,参考下面设置 |
Editor ⇨ Code Style | 导入配置 intellij-code-style.xml |
Editor ⇨ Inspections | 取消勾选Spelling ⇨ Typo |
B,E,D ⇨ Debugger | Build-in server Port设置为8800 |
B,E,D ⇨ Maven |
Maven home directory:D:/JavaEE/maven/3.2.3 |
下表列出的快捷键,基于Eclipse方案修改得到:
分类 | 快捷键 | 说明 |
工具和视图 | Ctrl + Alt + S | 弹出设置对话框 |
Ctrl + Tab Ctrl + Shift + Tab |
弹出小窗格,在其中快速切换编辑器窗口和视图窗口 | |
Win/Opt + R | 弹出小窗格,显示最近打开的文件列表 | |
Alt/Cmd + R | 弹出小窗格,显示最近修改的文件列表 | |
Ctrl + Alt/Cmd + Left Ctrl + Alt/Cmd + Right |
在打开的编辑器Tab页之间切换 | |
Alt/Cmd + Shift + Left | 切换到上一个编辑位置 | |
Alt/Cmd + Shift + Right | 切换到下一个编辑位置 | |
Alt/Cmd + Left Alt/Cmd + Right |
在编辑器Tab页之间切换 但是依据你针对编辑器页签的操作情况,可能在同一个编辑器页签中多次切换光标位置,而不是立即切换到上一个页签 |
|
Win/Opt + 0 | Favorites工具窗口 | |
Win/Opt + 1 | Project工具窗口 | |
Win/Opt + 2 | Structure工具窗口 | |
Win/Opt + 3 | Hierarchy工具窗口 | |
Win/Opt + 4 | Maven Projects工具窗口 | |
Win/Opt + 5 | Database工具窗口 | |
Alt/Cmd + 0 | Terminal工具窗口 | |
Alt/Cmd + 3 | Event Log工具窗口 | |
Alt/Cmd + 4 | Docker工具窗口 | |
Alt/Cmd + 5 | Debug工具窗口 | |
Alt/Cmd + 6 | Run工具窗口 | |
Alt/Cmd + 7 | TODO工具窗口 | |
Alt/Cmd + 8 | Version Control工具窗口 | |
Ctrl + Shift + ESC | 关闭所有工具窗口 | |
Ctrl + Esc | 关闭当前活动工具窗口 | |
Alt/Cmd + T,T | 在Hierarchy工具窗口中显示类型的层次关系 | |
Alt/Cmd + T,M | 在Hierarchy工具窗口中显示方法覆盖的层次关系 | |
Alt/Cmd + T,C | 在Hierarchy工具窗口中显示方法调用的层次关系 | |
Delete Alt/Cmd + Backspace |
删除文件 | |
构建/运行 | Ctrl + B | 构建工程 |
Win/Opt + B | 构建模块 | |
Alt/Cmd + B | 对于IDEA:构建构件 对于CLion:构建工程 对于AppCode:构建工程 |
|
Ctrl + F10 | 运行当前文件(上下文配置) | |
Ctrl + F9 | 调试当前文件(上下文配置) | |
Shift + F10 | 弹出菜单,选择一个文件并运行 | |
Shift + F9 | 弹出菜单,选择一个文件并调试 | |
F10 | 运行当前Run/Debug配置 | |
F9 | 调试当前Run/Debug配置 | |
F11 | 停止运行当前程序 | |
F12 | 对于IDEA:更新当前Java应用 对于PhpStorm:上传到默认服务器 |
|
F5 | Step Into,跳过Step过滤器中包含的库、构造器等代码 | |
Shift + F5 | 强制Step Into,忽略Step过滤器的设置 | |
Ctrl + F5 | 智能Step Into,允许你选择Step Into哪个方法 | |
F6 | Step Over | |
Shift + F6 | 强制Step Over,忽略任何断点 | |
F7 | Step Out | |
F8 | 释放单步跟踪,继续运行到下一断点 | |
Win/Opt + Space | 释放单步跟踪,运行到光标所在行 | |
Ctrl + Win/Opt + Space | 释放单步跟踪,强制运行到光标所在行,忽略任何断点 | |
Alt/Cmd + E | 调试模式下,临时估算一个表达式的值 要持续监测表达式,在Debug工具窗口中的Debugger ⇨ Watches中添加表达式 |
|
Ctrl + Shift + B | 添加/删除当前行的断点 | |
Alt + Shift + B | 启用/停用当前行的断点 | |
Ctrl + Shift + M | 启用/停用当前行的书签 | |
Ctrl + W | 关闭当前项目 | |
编辑器 | Alt/Cmd + G | 生成新代码,例如添加构造器、getter/setter方法 |
Alt/Cmd + J | 插入一个活动模板(Live Template) | |
Alt/Cmd + S,S | 以...包围 | |
Alt/Cmd + S,J | 以活动模板包围 | |
Shift + Enter | 在当前行后面插入新行,并定位光标到新行 | |
Ctrl + Shift + Enter | 在当前行前面插入新行,并定位光标到新行 | |
Ctrl + Enter | 在光标所在位置后面插入换行符 | |
Ctrl + Alt + Enter | 完成当前语句,添加缺少的括号、分号等 | |
Alt/Cmd + O | 快速大纲(当前文件结构) | |
Ctrl + Alt + U | 显示选中类/接口的类图(只显示超类) | |
Alt/Cmd + P | 方法调用的参数类型提示 | |
Alt/Cmd + Up Alt/Cmd + Down |
上下移动当前行 | |
Alt/Cmd + D | 删除当前行 | |
Ctrl + / | 注释/解除注释当前行 | |
Ctrl + Shift + / | 块注释 | |
Alt/Cmd + + Alt/Cmd + - |
展开/折叠代码块 | |
Ctrl + Alt + O | 清理导入(Java的import、C的include等) | |
Ctrl + Shift + F | 格式化当前文档 | |
Ctrl + Shift + L | 排序代码 | |
Alt/Cmd + W Alt/Cmd + Shift + W |
扩展/收缩选区 | |
Win/Opt + W | 关闭当前编辑器窗口 | |
Win/Opt + , | 上一个高亮错误 | |
Win/Opt + . | 下一个高亮错误 | |
Alt/Cmd + , | 上一个编辑器内搜索匹配结果 | |
Alt/Cmd + . | 下一个编辑器内搜索匹配结果 | |
Alt/Cmd + Shift + , | 上一个搜索匹配结果 | |
Alt/Cmd + Shift + . | 下一个搜索匹配结果 | |
Ctrl + Alt/Cmd + Up | 上一个差异(文件对比弹框) | |
Ctrl + Alt/Cmd + Dn | 下一个差异(文件对比弹框) | |
Ctrl + Alt/Cmd + Left | 比较上一个文件 | |
Ctrl + Alt/Cmd + Right | 比较下一个文件 | |
Alt/Cmd + Mouse3 | 列选择模式 | |
Ctrl + Shift + Up | 上一个方法 | |
Ctrl + Shift + Down | 下一个方法 | |
搜索 | F3 |
转到类型、方法的声明 如果在方法声明上调用此快捷键,则寻找该方法的使用情况 备用快捷键: Ctrl + Mouse1 |
Win/Opt + F | 查找选中符号(字段、方法)的引用(调用) | |
Win/Opt + Shift + F | 查找选中符号在当前文件中的引用 | |
Alt/Cmd + F |
在当前文件中查找/替换 Alt/Cmd + , 上一个匹配 |
|
Ctrl + F | 在选中的路径下查找包含内容的文件 | |
Ctrl + R | 在选中的路径下,查找包含内容的文件,并且替换这些内容 | |
Ctrl + Shift + A | 快速动作或者选项 | |
Ctrl + Shift + R | 快速打开文件 | |
Ctrl + Shift + T | 快速打开类 | |
Ctrl + Shift + Alt + N | 快速定位到符号(方法、字段) | |
Ctrl + Shift + Q | Search Everywhere功能。可以依据文件名查找类、资源文件,可以查找符号名称、Action等(搜索结果是上面4个快捷键的集合) 默认键盘布局下是Shift, Shift |
|
智能化 |
Alt/Cmd + Enter | 意图操作(Intention Action),根据上下文猜测你可能想做的事情 |
Alt/Cmd + / | 触发智能提示 | |
重构 | Ctrl + Shift + Alt/Cmd + R | 弹出重构菜单 |
Alt/Cmd + Delete | 安全删除 | |
Shift + Alt/Cmd + R | 重命名 | |
Shift + Alt/Cmd + S | 改变方法签名 | |
Shift + Alt/Cmd + V | 抽取局部变量 | |
Shift + Alt/Cmd + F | 抽取字段 | |
Shift + Alt/Cmd + C | 抽取常量 | |
Shift + Alt/Cmd + C | 修改方法签名 | |
Shift + Alt/Cmd + M | 抽取方法 | |
Shift + Alt/Cmd + P | 抽取参数 | |
Shift + Alt/Cmd + L | 转换为Lambda表达式 | |
Shift + Alt/Cmd + I | 将方法调用内联 | |
版本控制 | F4 | 显示上下文敏感的版本控制操作 |
Ctrl + Alt/Cmd + U | 更新工程、目录或者文件 | |
Ctrl + Alt/Cmd + A | 添加选中文件到版本控制 | |
Ctrl + Alt/Cmd + Z | 回退选中的文件 | |
Ctrl + Alt/Cmd + A | 查看选定修订版影响的全部文件,你可以在弹出窗口中执行回退操作 | |
Ctrl + Alt/Cmd + V | 查看选中目录/文件的VCS历史 | |
Ctrl + Alt/Cmd + P | Git Push操作 | |
Ctrl + Alt/Cmd + Shift + P | Gti Pull操作 | |
Ctrl + Alt/Cmd + / | Git Stash操作 | |
Ctrl + Alt/Cmd + Shift + / | Git Unstash操作 | |
Ctrl +Alt/Cmd + " | Git Branches |
Change list是一个很体贴的功能,它允许你把纳入版本控制的文件分组,每次只提交其中的一组。某些配置文件需要针对本地环境修改,每个开发者都不一样。这些本地修改不能提交到VCS,这时可以把它们添加到另外一个变更集中,防止误提交。
在提交对话框中,左面板的又上角由一个Change list下拉框,你可以选择当前要提交的变更集:
左侧待提交文件列表中,你可以右击任何目录、文件,修改它们所属的变更集。
Settings ⇨ Version Control ⇨ GitHub,在这里设置你的GitHub用户名和密码
Settings ⇨ Version Control ⇨ Git:
- Auto-update if push of the current branch was rejected:如果勾选,当Push失败后,会自动从远程仓库拉取更新
- Allow force push:是否允许强制Push
VCS ⇨ Import into Version Control ⇨ Share Project on GitHub,弹出下面的对话框:
点击Share后,IDE会使用你的账号,在GitHub上面创建一个空白的裸仓库。
在下一个弹出的对话框中,你可以选择需要添加的文件,并提交。
注意,提交仅仅是针对你本地的Git仓库。要Push到GitHub,需要VCS ⇨ Git ⇨ Push(Eclipse方案下快捷键为Ctrl + Shift + K) :
可以看到,本次Push会在远程仓库初始化master分支。在后续的开发过程中,你随时可以把本地的Tag一同Push到远程仓库。
上图中:
- 当前位于develop分支上,看黄色标签
- 本地仓库的develop分支,和远程仓库的develop分支,处于同步状态,看绿色标签和紫色标签重合
- 本地仓库的master分支位于commit4(绿色标签),远程仓库的master分支位于commit5(紫色标签)
在此时,你可以点击右下角 Git:develop ⇨ Remote Branches ⇨ Merge,把任意分支合并到develop分支。例如,合并master分支,之后Git Log变为:
可以看到,合并后默认自动提交。现在的情况是,本地仓库的develop和远程的develop不同步了。你可以执行一下Push:
这时develop分支的绿、紫标签又在一起了。
在develo commit 3(57a408d)上右击,Reset Current Branch to Here ... ⇨ Hard,现在变为:
注意黄色小标的位置。
我们可以强制Push版本57a408d到远程仓库,替换掉最新的673bb5c。在Push弹窗中,点击右下角Push按钮的下箭头,选择Force Push。提交后,服务器的develop分支的版本变的和本地一致:
其它开发人员,切换到develop分支后,执行Update Project,紫色标签的位置和远程仓库(被强制Push的)变的一致:
这时,此开发人员比远程仓库多出来的develo commit 6,可以Push,也可以右键 ⇨ Undo Commit,撤销掉提交。提交撤销后,其导致的修改将存在于当前工作区。
这里提到的主题,是指IDE本身的组件(例如菜单、按钮)的样式风格。和编辑器色彩方案不同,Intellij平台没有提供细粒度的控制,只允许用户在三个预置的主题中选择。
最近Intellij平台下的IDE分别发布2016.1版本,升级后,我注意到Linux下的GTK+主题存在BUG,编辑器面板等地方出现多余灰色边框(IDEA-152424),非常难看。等了几个月了,这个BUG还没有修复,为了拯救完美主义强迫症的自己,动手改吧……
我的想法是,把默认的Intellij主题中的蓝色调改为Ubuntu的橙色调风格,而不是去修复GTK+主题。这主要是考虑到默认主题在三大OS上都大量使用,JetBrains在此主题上花费的精力会比较多。相比之下,Linux下的GTK+主题由于用户较少,一直存在各种BUG。
虽然没研究过Intellij平台的源码,但是既然它是基于Swing的,我觉得应该找一些和LookAndFeel有关的类作为代码分析的入口。
我以CLion为例尝试。打开lib目录下最大的jar包,反编译,大概浏览了一下代码,发现com.intellij.ide.ui.laf包和主题相关,而IntelliJLaf类则对应了默认的IntelliJ主题。清空配置文件intellijlaf.properties的内容,启动CLion后发现完全界面完全变样了,由此推断,修改此配置文件是最简单的主题定制方式。修改并测试后,以下配置项被调整:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 面板中选区的背景色 intellijlaf.selectionBackground=F07746 # 复选框边框,上半部分 CheckBox.darcula.borderColor1.selected=CC5627 # 复选框边框,下半部分 CheckBox.darcula.borderColor2.selected=CC5627 # 复选框背景,上半部分 CheckBox.darcula.backgroundColor1.selected=F58456 # 复选框背景,下半部分 CheckBox.darcula.backgroundColor2.selected=EC7B4D # 选中复选框中的小钩子的阴影色 CheckBox.darcula.shadowColor.selected=90553C # 获得焦点的复选框的颜色 CheckBox.darcula.focusedArmed.backgroundColor1.selected=F58456 CheckBox.darcula.focusedArmed.backgroundColor2.selected=EC7B4D CheckBox.darcula.focused.backgroundColor1.selected=E7976D CheckBox.darcula.focused.backgroundColor2.selected=E7976D # 下拉列表箭头颜色 ComboBox.darcula.arrowFillColor=D96334 ComboBox.darcula.arrowFocusedFillColor=EC7B4D # 按钮背景颜色 Button.darcula.selection.color1=EC7B4D Button.darcula.selection.color2=CC5627 # 数字字段按钮背景色 Spinner.darcula.enabledButtonColor=D96334 # 树选区边框颜色 Tree.selectionBorderColor=D96334 |
保存并更新压缩包后,重启CLion,可以发现一部分UI组件的配色改变了,但是聚焦的按钮、搜索框、复选框、单选框等组件依然会显示出蓝色。
其实切换到到深色主题Darcula,会发现那种蓝色也是存在的。进一步查看代码,可以发现IntelliJLaf的父类是DarculaLaf,原来浅色主题是从深色主题继承扩展而来的(比较反直觉…)。对某些控件加上蓝色发光效果,是DarculaLaf了类具有的一个行为,IntelliJLaf可能仅仅是继承了这一行为。
继续分析了一会代码,发现com.intellij.ide.ui.laf.darcula.DarculaUIUtil类中硬编码了发光效果的颜色,修改该类的两个成员,编译后替换同名文件:
1 2 3 4 5 6 |
public class DarculaUIUtil { public static final Color GLOW_COLOR = new JBColor(new Color(204, 86, 39), new Color(240, 119, 70)); private static Color a() { return new JBColor(new Color(204, 86, 39), new Color(240, 119, 70)); } } |
以上步骤都完毕后,单选框还是顽固的蓝色,呵呵,又一个硬编码的颜色需要修改:
1 2 3 4 5 6 |
public class DarculaRadioButtonUI extends MetalRadioButtonUI { protected void paintIcon(JComponent var1, Graphics2D var2, Rectangle var3, Rectangle var4) { ... JBGradientPaint var11 = new JBGradientPaint( var1, new Color(240, 119, 70), new Color(204, 86, 39) ); } } |
最终效果的截图在这里,只是把IntelliJ主题的蓝色系改为橙色系,但是和Ubuntu系统很搭配呢。
这个可以通过IDE设置:Settings ⇨ Editor ⇨ General,展开到Editor ⇨ Selection background,修改为F07746。该设置不但影响编辑器窗口,还会影响到Terminal、Messages、Event Log等基于文本的Tool window。
Window ⇨ Store Current Layout as Default
安装jayatana:
1 2 3 |
sudo add-apt-repository ppa:danjaredg/jayatana sudo apt-get update sudo apt-get install jayatana |
修改IntelliJ的配置文件:
1 2 |
# 添加下面的内容 -javaagent:/usr/share/java/jayatanaag.jar |
此方法适用于任何Swing程序。
最新版本(至少2018)版本的Intellij,不再需要jayatana,而且jayatana可能导致Intellij功能异常。要启用全局菜单,搜索Action ,Experimental Features,勾选 linux.native.menu
安装修复过字体渲染的OpenJDK:
1 2 3 |
sudo add-apt-repository ppa:no1wantdthisname/openjdk-fontfix sudo apt-get update sudo apt-get install openjdk-7-jdk |
修改IntelliJ的配置文件:
1 2 3 4 5 |
# 添加下面的内容 -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true -Dsun.java2d.xrender=true -Dsun.java2d.pmoffscreen=false |
修改IntelliJ的启动脚本,使用刚下载的OpenJDK:
1 |
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 |
更进一步,可以安装Infinality,提升Ubuntu下字体渲染。
Ubuntu14下的基于IntelliJ平台的IDE,有两个地方可以设置字体:
- A & B ⇨ Appearance,Override Default fonts by 。这里可以设置IDE界面字体,包括菜单、Tool Window、Quick documentation弹窗等
- Editor ⇨ Color & Fonts ⇨ Font。这里可以设置编辑器字体
默认情况下,系统语言设置为中文时,不进行任何设置就可以正常显示中文。
如果设置上面的第1项,需要保证选中的字体中包含中文字符的支持,否则很多地方的中文会显示为空心小方块。
最新的2016版本发布后,IntelliJ平台内置了修改后的Open JDK,提升了字体渲染效果,而且比进行过Fontfix的Open JDK字体更加清晰。试用后发现,系统语言设置为英文时,Quick documentation弹窗、搜索框中的中文都是乱码。除了把1设置为某种中文字体。
问题是,英文系统下默认字体“Ubuntu”比其它字体美太多,实在不想弃用。所以我把Wenquanyi Micro Hei中的中文合并到Ubuntu中,生成一个新字体“Ubuntu Micro Hei”,调整Hint后,发现英文部分显示效果和Ubuntu字体几乎无差,中文也支持了。下面是截图:怎么样,是不是觉得比Mac OS X的渲染效果还惊艳(注:安装了Infinality,并且渲染风格设置为OS X;IntelliJ中字体Antialiasing设置为Subpixel)
下面提供字体的下载链接:Ubuntu Micro Hei。
只需要记住:右侧面板显示的是,当前时间点相对左侧选中的那个事件(时间点)发生之前,文件的差别:
- 如果某个文件当前是有的,那个时间点是没有的,文件名称显示为绿色
- 如果某个文件在两个时间点都存在,但是有改动,文件名称显示为蓝色
- 如果某个文件在当前是没有的,而那个时间点是有的,文件名称显示为灰色
示例截图:
在这个例子中。我们最后做了一条回退操作,在这之前,我们删除了两个文件,添加了一个文件。因而回退后,相对于回退前是添加了两个文件,删除了一个文件。 一定要明白“事件之前”而不是之后,如果是之后,那么Difference应该不存在。
首先在钥匙串应用中删除对应的条目,然后通过IntelliJ 进行SVN操作,根据提示输入密码、点击记住。后续系统会提示是否允许IntelliJ访问钥匙串,选择总是允许。
在Ubuntu下,默认的你无法定制某些Alt + *的快捷键,原因是分配给Global菜单了。
要解决此问题,打开Settings ⇨ A & B ⇨ Appearance,右侧找到Window Options区域,勾选 Disable mnemonics ...
Inatellij 2017以后的版本,在Ubuntu下用IBUS输入中文,上屏时会出现闪烁。调试可以发现,它先渲染出一个英文字符大小的方框,然后在渲染出中文字符。
这个问题和零延迟渲染特性有关,设置系统属性 -Deditor.zero.latency.rendering=false即可解决。
Leave a Reply