Java Swing组件黑色在第二个屏幕上的bug

时间:2017-02-01 07:06:49

标签: java swing

我在Java Swing中开发了一个简单的GUI,出于某种原因,我看到了一些怪异的行为。

在一台计算机上,当笔记本电脑自己的屏幕上打开摆动窗口时,它看起来很正常,但是当移动到第二个屏幕时,它会变成完全黑色,即使它部分在一个部分而另一部分在另一个部分正确显示笔记本电脑屏幕和另一个黑色。

我无法在自己的电脑上复制它(即使我有三个屏幕),所以我想询问是否有其他人有类似的经历。

一个理由可能是笔记本电脑和第二个屏幕有不同的颜色深度,这就是搞乱它。

关于它为什么会发生的任何指示以及最受欢迎的解决方案。

2 个答案:

答案 0 :(得分:1)

我尝试在辅助监视器上使用Freemind时,我只是目睹了同样的行为。一个快速的谷歌似乎表明它是一个Java错误。 更多背景信息:

  • JRE 1.8.0_121(最新版本)
  • Windows 10
  • 无论第二台显示器是配置在主显示器的左侧还是右侧,都会发生错误(所以可能不会出现负屏幕坐标问题)
  • 真正令人毛骨悚然的部分是,如果我将窗口拖动到辅助显示器足够慢,FreeMind会正确显示,所以可能存在与刷新率相关的问题。
  • 问题可能与每个显示器上设置的缩放系数相关联(我的主显示器上为125%,而我的主显示器上为100%)因为当我将显示器从一台显示器移动到另一台显示器时,窗口会明显调整大小

希望这有帮助。

注意:这应该是评论而不是答案,但我还没有足够的声誉点;)

编辑2018年4月:

对于那些仍然磕磕绊绊的人:在同一台PC上,一些软件更新后,这个bug就消失了。我现在正在运行JRE 1.8.0_144,Windows 10 Pro 1709(版本16299.371)。我最好的选择是Windows更新解决了这个问题;对于遗留/ Java应用程序(JMeter,Gimp),窗口大小调整和缩放因子现在比一年前好多了。

答案 1 :(得分:0)

我用apache-jmeter-r1839892(jmeter 5的夜间生成)遇到了这个问题,我的环境信息如下:

  • JRE 1.8.0_101 32位
  • Windows 10,版本1607内部版本14393.1944。
  • Inter(R)HD Graphics 530
  • NVIDIA Quadro M1000M

我将JDK 10.0.2升级到64位之后,就可以使用。

最有可能提及我的根本原因: http://www.drastic.tv/support-59/supporttipstechnical/66-javaondualmonitors 上面链接中提到的以下解决方案也可以与JRE 1.8.0_101 32bit一起使用

  • 开始->控制面板->系统
  • 点击“高级”标签
  • 单击“环境变量”按钮
  • 点击“新建”按钮
  • 对于变量名:_JAVA_OPTIONS
  • 对于变量值:-Dsun.java2d.d3d = false

我还发现了另一个解决方法:在Windows中打开jmeter,将第二台显示器设置为主显示器,然后将第一台显示器切换回主显示器。

我还试图升级到64位JDK 1.8.0_181,问题仍然存在。