早晨起来,我又折腾了大半天,当然,还是希望解决三四年前不知为何,引入到 TBtools 的文件拖拽 bug。简单来说,就是从 JDK 11.0.6 (不包括11.0.6)之后的所有 JDK 版本,都会出现拖拽并放置文件到 TBtools 中,然后卡死。卡死的频次在 JDK 11 上非常高。这个就很难,一般而言,我自然是不希望升级 JDK,毕竟一升级可能会出现某些接口不兼容云云,我至今用 JDK 6 在 coding。
但是为了让 TBtools 在 HDPI 界面上显示良好,必然是要升级到 JDK 9 或者以后版本,jdk11是 LTS ,自然很好。当然,停留在 JDK11 不是不行,我也希望如此。然而 windows 下 JDK11 的安装器无法正常工作(逻辑上仍然是 JDK 11 引入的bug,当然也或许是 windows 操作系统更新导致,估计就10%的用户会出现相关问题)。为此,针对10%的用户,我不得不升级到 JDK17 ,因为从这个版本开始,安装器完全稳定。然而....我惊喜的发现,JDK17 似乎就没解决文件置入卡死的问题。这就很难,鱼与熊掌~
- 无法安装,这个肯定不行,久而久之,自然会觉得,这是什么垃圾软件?安装都安装不了?
- 安装上了,文件拖拽一下就卡死,久而久之,自然会觉得,这是什么垃圾软件?拖拽个文件都会卡死?
Emmm,于是只要有点时间,我就只能各种测试。但是问题更严峻。我发现 JDK17 出现卡死问题的频次明显下降,但是,仍然会卡死(我C)。这个问题变得更像一个幽灵问题,一个难以重现的bug,远远不如一次直接让程序无法运行的bug。难以重现的bug,就像一个不定时炸弹,随时让你的程序卡死,这就很要命。
无奈之下,只能再次妥协。回退到11.0.16(注意,不是11.0.6),高频卡死的版本。当然,我更多地怀疑是我的代码实现如何如何?但各种测试下来,时间花下去,其实毫无结果。被逼无奈,拆解问题,写一个非常简单的 JPanel 测试,完全重现问题。这就很好了,希望满满。然而,经过一周左右的反复调试,也熬了夜,也掉了一些头发,无解。不过,好消息是我定位到问题似乎不是出现在代码实现上,因为从调试来说,文件就没有被程序识别到进入界面,此时就卡死了。这类情况,除非做个hook检测,自动跳出进程(当然,似乎也实现不了这个hook)。
百般无奈,还是搜索下相关问题。but,我一直用 drag and drop files stuck on windows,没搜索到啥...换了个关键词,今次我找到了,用 drag and drop files hangs on windows.....
也终于明白,就是 JDK 的问题....啊我好难。
整整有一系列相关 bug,每次都说修复了,其实都没有修复,截图两三个,从 2021年初到2022年中旬拖拽卡死问题解决了又出现又解决....
https://bugs.openjdk.org/browse/JDK-8262446
https://bugs.openjdk.org/browse/JDK-8274751
https://bugs.openjdk.org/browse/JDK-8281980
整体上看来 JDK19 似乎解决了。但是说实话,仍然没有......不过,经过这件事情,我想明白一个操作。既然不是我的问题,我也解决不了,那就相信自己,「坐享其成」。逻辑上,Java社区还是很活跃,相比于其他语言,商业化工作也多,只要有 bug,别人可比我着急多了。我就....坐着等着就行了,先小小委屈10%的用户(毕竟,卡死的问题,说实话,难以重现,也可以等于不会出现,是吧?对吧?没错吧?)