【发布时间】:2016-06-21 12:32:11
【问题描述】:
Swing 应用程序在使用 Java 8 的 VNC 桌面上启动时显示空白窗口。JRE 7 没有这个问题,非 Swing 应用程序(例如 Eclipse)在相同的设置下正常运行。
是否有某种默认设置,例如 3D 加速或在 JRE 8 上默认启用的某些设置?如何禁用它?
【问题讨论】:
-
郑重声明:该问题仅出现在 Java 8 中。已使用 Java 9 和 11 进行测试。
Swing 应用程序在使用 Java 8 的 VNC 桌面上启动时显示空白窗口。JRE 7 没有这个问题,非 Swing 应用程序(例如 Eclipse)在相同的设置下正常运行。
是否有某种默认设置,例如 3D 加速或在 JRE 8 上默认启用的某些设置?如何禁用它?
【问题讨论】:
TL;DR
详情:
我在 VNC 中也有空白的 Java 窗口,但使用的是 Java 7 和 Java 8,所以禁用 xrender 对我没有帮助也就不足为奇了。这可能会使在此处发布此内容严重违反 StackOverflow 协议,但我在这里找到了自己的方式,所以其他人肯定也会这样做。 -Dsun.java2d.opengl=true 使文本可见,虽然抗锯齿就像 1980 年代的调色板乱七八糟的东西,但后来我得到了窗口的虚假透明部分,总是相同的部分,干净地合成,所以不像驱动程序错误.注意到 glxgears 也以整洁的透明背景显示,当它在其他系统上是不透明的黑色时,我发现了一个针对“compton”的深思熟虑和信息丰富的错误报告,RGBA windows are always transparent #179。受到xdpyinfo 的启发,我发现我的VNC 服务器只提供深度为32 的“视觉效果”,即红色、绿色和蓝色各8 位以及8 位alpha 的视觉效果。似乎 Java 和 glxgears 想要一个不透明的视觉效果,所以深度为 24 之一。我的普通 :0 X 服务器将其作为默认设置。对于 -depth 开关,man Xtigervnc 表示“默认值为 24,其他可能的值为 8、15 和 16 - 其他任何值都可能导致应用程序出现奇怪的行为”,但 Debian's provisional packaging 用于 TigerVNC,特别是在 /etc/vnc.conf和/usr/bin/tigervncserver,将其设置为默认值32。-depth 24 突然间一切都变得美丽了,只有在请求的地方才具有半透明性。 xdpyinfo 透露了许多“视觉效果”,包括深度 32。
【讨论】:
在 Linux 系统上,我发现使用 -Dsun.java2d.xrender=false 选项解决了这个问题。我认为现在在 Java 8 上默认启用了 xrender。
Java 2D 的系统属性可以在这里找到:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html
【讨论】:
在 Red Hat Enterprise Linux 上,/etc/xrdp/xrdp.ini 文件中有两个设置:
未注释:serverbpp=24 更改了现有项目:max_bpp=24
【讨论】:
我今天在将JetBrains pycharm升级到2019.x.x版本后遇到了这个问题(尝试了其中的几个)。
与上述不同,我在 vnc 客户端和服务器上都配置了 16 位深度,这导致在我启动升级后的 pycharm 时出现一个没有显示文本的红色窗口(旧的 2018 版本运行良好)。
将客户端(remmina - 编辑单个连接配置)和服务器(tigervncserver / Xtigervnc)切换到 24 位深度解决了我的问题。
【讨论】: