我正在开发一个旨在以全屏模式运行的Java程序。它使用了许多定制的Swing组件和Java2D绘制的组件,需要每秒更新和重新绘制几次。它在我的动力不足的PC上工作得相对较好。
然后我在家里试用了功能更强大的PC。而且它的速度明显变慢了。触发一个应该立即更新大约20个不同屏幕元素的事件,而不是产生一种效果,其中每个元素似乎至少需要四分之一秒来重新绘制自己。因此,不是瞬时更改,而是需要5秒钟才能完成每个屏幕更改。
我想也许是我试图经常或以错误的方式重新粉刷。但在尝试了一些其他想法之后,在预感中我让应用程序以窗口模式而不是全屏模式启动。通过这一改变,一切都开始快速顺利地完成。
所以我想这里确实存在两个问题:为什么全屏模式会导致这个问题?为什么它只会在我更快的计算机上造成这个问题?我怀疑是否存在与操作系统相关的错误。我的慢工作计算机是Windows XP,而主计算机是Windows 7.我在其他线程中看到Win7上的Aero会导致Java速度问题,所以我尝试禁用它。这确实导致了一个小的速度改进,但它仍然不像我在窗口模式下运行那样平稳。有没有其他人在Win7上运行全屏Java应用程序时出现性能问题?如果是这样,有解决方法吗?
答案 0 :(得分:4)
我找到了解决方案。我偶然发现了Oracle的Java System属性页面(http://docs.oracle.com/javase/1.5.0/docs/guide/2d/flags.html),并认为那里可能有一些有用的东西。在使用trace命令时,我注意到有很多Direct3D引用。由于我的应用程序中没有任何东西是3D,我觉得很奇怪。所以我在我的Java命令行中添加了-Dsun.java2d.d3d = false。正如该页面所说,该选项将“关闭Java 2D系统对Direct3D的使用”。它就像一个魅力。现在它在我的Windows 7机器上以全屏模式运行得非常顺畅。