Java swing 应用程序无法使用 VNC 正确呈现

Java swing applications not rendering properly with VNC

Swing 应用程序在使用 Java 8 在 VNC 桌面上启动时显示空白 window。我在 JRE 7 和非 swing 应用程序(例如Eclipse) 使用相同的设置正常运行。

是否有某种默认设置,例如 3D 加速或在 JRE 8 上默认启用的某些设置?我该如何禁用它?

在 Linux 系统上,我发现使用 -Dsun.java2d.xrender=false 选项可以解决问题。我认为 xrender 现在默认启用 Java 8.

Java 2D 的系统属性可在此处找到:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html

TL;DR

  • Java 和 glxgears 期望颜色深度为 24。
  • 确保 X 和 VNC 设置为使用 24 深度,而不是其他深度,如 16 或 32。

详情:

我在 VNC 中也有空白 Java windows,但是 Java 7 和 Java 8,所以禁用 xrender 没有帮助我。这可能严重违反了 post 此处的 Whosebug 协议,但我在这里找到了自己的方式,所以其他人肯定也会这样做。 -Dsun.java2d.opengl=true 使文本可见,虽然抗锯齿就像 1980 年代的东西,调色板一团糟,但后来我得到了 windows 的虚假透明部分,总是相同的部分,干净地合成,所以不像驱动程序错误。注意到 glxgears 也显示了一个整洁的透明背景,当它在其他系统上是不透明的黑色时,我发现了一个针对“compton”的周到且信息丰富的错误报告,RGBA windows are always transparent #179. Inspired to look at xdpyinfo, I found my VNC server was offering "visuals" of depth 32 only, ie visuals with 8 bits each of red, green and blue and eight bits of alpha. It seems Java, and glxgears, want an opaque visual, so one of depth 24. My normal :0 X server has that as its default. For the -depth switch, man Xtigervnc says "Default is 24, other possible values are 8, 15, and 16 - anything else is likely to cause strange behaviour by applications", yet Debian's provisional packaging for TigerVNC,特别是在 /etc/vnc.conf/usr/bin/tigervncserver,将其设置为默认值 32。-depth 24 突然之间,一切又变得美丽起来,只有需要的地方才具有半透明性。 xdpyinfo 透露了许多提供的“视觉效果”,包括深度 32。

我今天在将 JetBrains pycharm 升级到 2019.x.x 版本后遇到了这个问题(尝试了其中的几个)。

与上面不同的是,我在 vnc 客户端和服务器上都配置了 16 位深度,这导致在我开始升级 pycharm(较早的 2018版本工作正常)。

将客户端(remmina - 编辑单独的连接配置)和服务器(tigervncserver / Xtigervnc)切换到 24 位深度解决了我的问题。

在 Red Hat Enterprise Linux 上 /etc/xrdp/xrdp.ini 文件中有两个设置:

未注释:serverbpp=24 更改了现有项目:max_bpp=24