通过远程桌面进行Java渲染

时间:2017-07-31 10:09:14

标签: java remote-desktop

我正在尝试通过windows7下的远程桌面连接访问我在RHEL7服务器上运行的java程序。

服务器中的所有Java程序都无法通过远程桌面呈现。如果我在服务器位置访问服务器本身,它们看起来没问题。

enter image description here

我在其他线程中看到,更改nvidia配色方案可能有所帮助,但服务器使用的是默认图形。

5 个答案:

答案 0 :(得分:2)

我明白了:

  • 启动远程连接时,请打开连接选项。
  • 转到屏幕
  • 转到颜色
  • 选择16位颜色。

完成。

答案 1 :(得分:2)

通过RDP连接到Windows 7计算机时,此方法有效:

  • 启动远程连接时,打开连接选项;
  • 转到“显示”标签;
  • 在“颜色”中,选择“ 高色(15位)”。

接受的答案对我不起作用,但指向了这个方向 (我会发表评论,但目前我的声誉不高。)

答案 2 :(得分:1)

此答案扩展了TeamViewer线程上有关“ Some applications does not show content (white window) Windows 10 host”的详细解决方案。

请参见下面的“ 解决方案”。

摘要

我已经注意到,当不再将主监视器连接到设备时,此问题通常与Java应用程序有关。例如某些笔记本电脑,当合上盖子时会“断开”内置屏幕,或者在工作站没有连接屏幕时会断开连接。

基于带有和不带有监视器的应用程序的行为,对graphics accelerators的表面理解以及我在下面引用的论坛帖子中的经验,我相信导致无内容的窗口的原因是结果由于显示器断开而禁用了加速器时,应用程序对DirectDraw或Direct3D子系统(与3D加速硬件接口)的依赖关系。

我认为,在尝试使用Wine兼容层(https://bugs.winehq.org/buglist.cgi?component=directx-d3d&product=Wine&resolution=---)在Linux环境中运行依赖于3D加速的应用程序时,我也遇到了类似的问题

这也许是3D图形处理器的一种节能功能,当未检测到任何屏幕时便会激活,或者这可能与不知道支持的输出分辨率的帧缓冲区有关,因此禁用了Windows shell对GPU的访问,这会导致Windows恢复为纯软件渲染;或其他原因。

无论是什么原因,我都认为在禁用显示器后专用图形硬件无法用于3D处理,并且所有遇到此问题的软件的共同点都是Java,我质疑JVM是否依赖于D3D进行渲染,即使Windows仅提供纯软件渲染。

解决方案

参考:https://superuser.com/a/496775

使用DXDiag,我检查了Display DirectX功能的状态:

DirectDraw加速:已启用

Direct3D加速:已启用

AGP纹理加速:已启用

除了创建Direct3D \ Drivers项之外,我还手动创建了这些注册表值:

Reg Add HKLM\SOFTWARE\Microsoft\DirectDraw /V EmulationOnly /T REG_DWORD /D %_Mode% /F

Reg Add HKLM\SOFTWARE\Microsoft\Direct3D\Drivers /V SoftwareOnly /T REG_DWORD /D %_Mode% /F

然后,我使用DXDiag检查了Display DirectX功能的新状态:

DirectDraw加速:已禁用

Direct3D加速:已禁用

AGP纹理加速:不可用

当监视器分离后,Java程序窗口现在可以通过VNC Viewer正确呈现内容。

我没有尝试过在SuperUser线程中引用的兼容性向导中使用“ ForceDirectDrawEmulation”选项的建议。

研究和参考

下面的每个标题中都有论坛帖子的记录,这些帖子被认为是导致上述解决方案研究的一部分。

每个部分都以记录引用线程中提出的解决方案的结果或线程与我的环境不相关的原因结尾;但解决方案可能与其他人有关。

在Windows显示设置中禁用硬件加速

参考:https://www.auslogics.com/en/articles/disable-hardware-acceleration-in-windows/

未尝试,因为“显示设置”窗口崩溃了

试图防止显示器断开连接时GPU(ATI Mobility Radeon HD 4500)禁用硬件加速

参考:https://social.technet.microsoft.com/forums/windows/en-us/8a9b5aa7-fe33-4e6d-b39b-8ac80a21fdc2/disable-monitor-off-detection-how?forum=w7itprogeneral

禁用了?Display Detection?,以防止检测到断开连接,从而避免禁用硬件加速

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"Display_Detection_DEF"=dword:00000001

为ATI卡创建/空DMMEnableDDCPolling-参考:NetMage帖子

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000]
"DMMEnableDDCPolling"=dword:00000000

虽然重新启动过程中关闭了笔记本电脑盖,但重新启动系统后没有任何影响。尽管即使它确实起作用,但这也可能不是一个合适的解决方案。

一种更合适的解决方案是,无论显示器是否检测到,都可以强制“始终开启” 3D硬件加速。

系统级(Java控制面板)为Java应用程序禁用了D3D加速

参考:https://forums.guru3d.com/threads/disable-hardware-acceleration-for-java.296918/#post-4096709

未尝试,因为我的系统上没有Java控制面板

为Java应用程序在系统范围内(环境变量)禁用D3D加速

参考:https://stackoverflow.com/a/36235217

Java 2D的系统属性:http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html

设置用户环境变量:

_JAVA_OPTION=-Dsun.java2d.d3d=false -Dsun.java2d.noddraw=true

J2D_D3D=false

如果这行得通,那将是一个理想的解决方案,因为它是Java特定的配置,而不是上述解决方案,后者需要进行完整的系统更改以补偿Java特定的问题。 / p>

但是,设置环境变量并不能为我解决无内容的Window问题。

也许JRE 8的文档已过时,并且较新的版本中提供了一种替代方法。一旦意识到了解决方案,我就不会再寻找更新的文档或替代解决方案。

在Windows 7上禁用Direct3D加速

参考:How to disable Direct3D Acceleration on Windows 7?

directx.cpl指南-更改32位DirectDraw和Direct3D,但不更改64位(dxdiag 32/64位):https://stackoverflow.com/a/25508331

我没有运行Windows 7的32位版本

在Windows 8 [/ 10]上禁用DirectDraw和Direct3D加速

参考:https://superuser.com/questions/495303/how-do-i-disable-directdraw-and-direct3d-acceleration-on-windows-8

directx.cpl指南-更改32位DirectDraw和Direct3D,但不更改64位(dxdiag 32/64位):https://superuser.com/a/504510

我正在运行Windows 10的64位版本,并且Java应用程序也是64位,因此32位DirectDraw和Direct3D设置与我无关,尽管32位Directx.cpl确实如此禁用32位DXDiag验证的32位DirectDraw和Direct3D。

上面的解决方案部分详细介绍了用于禁用64位DirectDraw和Direct3D的注册表项和过程。

答案 3 :(得分:1)

从远程会话注销(不仅断开连接)对我来说已经更改了。也许此答案对那些在本文结尾的人有所帮助,因为他们在通过远程连接鬼混后在Java App上有一个有趣的超大边框。

我通过Windows 10使用mac parallels软件进行远程连接。然后,我对并行进行了配置更改。然后我在Mac上设置了VPN和远程连接,出现了问题。我注销并在远程站点上登录后,它变得“正常”。

答案 4 :(得分:0)

您遇到问题的原因可能是您作为其他用户连接和/或拥有与远程桌面用户不同的权限。我有xrdp的问题。 尝试使用TeamViewer或其他远程桌面解决方案。