当前位置: 首页 > 面试题库 >

为什么我的Java应用程序在全屏模式下运行得如此缓慢?(并且在打开窗口时很好)

袁河
2023-03-14
问题内容

我正在使用旨在以全屏模式运行的Java程序。它使用了许多自定义的Swing组件和Java2D绘制的组件,这些组件需要每秒更新和重新绘制几次。而且在我动力不足的工作PC上,它运行得还算不错。

但是后来我在功能更强大的PC上在家中进行了试用。而且运行速度明显变慢。触发一个事件,该事件应该立即更新约20个不同的屏幕元素,从而产生一种效果,其中每个元素似乎至少需要花费四分之一秒才能重新绘制自身。因此,无需立即进行更改,而是需要5秒钟来完成每个屏幕更改。

我以为也许是我尝试过频繁或以错误的方式重新粉刷。但是,在尝试了其他想法之后,我凭直觉使应用程序以窗口模式而不是全屏模式启动。有了这一更改,一切就开始快速,流畅地完美运行。

因此,我认为这里确实存在两个问题:为什么全屏模式会导致此问题?为什么只在速度更快的计算机上引起此问题?我确实怀疑存在与操作系统相关的错误。我运行缓慢的计算机是Windows
XP,而家用计算机是Windows7。我在其他线程中看到Win7上的Aero可能会导致Java速度问题,因此我尝试禁用它。确实确实提高了一点速度,但是仍然不如我在窗口模式下运行时的平滑。还有其他人在Win7上运行全屏Java应用程序时遇到性能问题吗?如果是这样,是否有解决方法?


问题答案:

我找到了解决方案。我偶然发现了Oracle的Java系统属性页面(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计算机上以全屏模式完美流畅地运行。



 类似资料:
  • 我在pyplay上做了一个Tamagotchi项目,在这个早期阶段,程序运行非常缓慢。你对原因有什么提示吗?还有,有没有办法加快速度? 到目前为止,这是我的代码:

  • 问题内容: 我有一些针对angularjs应用运行的简单的业力/茉莉单元测试。我使用最新版本的Chrome,并在WebStorm IDE中运行测试。 有时测试套件运行非常快(0.24秒) 有时,针对完全相同的代码的完全相同的测试套件运行非常缓慢(120秒) 我尝试了所有常识性修复。我在网上搜寻了一下,以发现我在做什么错。 为什么我的测试运行如此缓慢? 问题答案: 答案很简单。 我正在使用Chrom

  • 我试图在linux red hat上使用GLFW打开一个OpenGL全屏窗口。我有一个桌面,它跨越两个显示器,总分辨率为3840*1080。 我有两个问题:1。窗口仅在一台显示器上打开,最大窗口宽度为1920(单个显示器的宽度)。2.窗口的最大高度是1003(我认为是屏幕的高度减去任务栏和顶栏的高度)。 这是我用来打开窗口的代码: 输出:宽度=1920高度=1003 编辑:我使用xrandr检查可

  • 我正在构建自己的android应用程序,当我把它放在我的Nexus 5和Xperia Neo上时效果很好,但在Nexus 4或Galaxy S3上效果很慢。我不知道发生了什么。你能帮我吗?我正在使用android:minSdkVersion=“14”和android:targetSdkVersion=“17”,片段和一个抽屉布局。 包装测试。Droidlogin; 导入android.conten

  • 我决定学习如何调试Java EE应用程序。我有一个简单的JSF/EJB/JPA应用程序,我通过Intellij IDEA部署和运行它。这意味着我有一个所谓的run/debug配置,其中我指定了一个要部署的工件(一个war文件)、一个应用程序服务器路径(使用了wildfly-8.2.0.final/bin/standalone.bat)和一个部署后要在浏览器中打开的url(它是一个web应用程序)。

  • 我对一些代码进行了分析,并对花费了这么多时间感到惊讶。 但我发现这快了大约5倍: 下面是Math.min的代码以供参考: 注意:我的用例是对称的,上面的情况都适用于max,而不是min。 我在我的应用程序中添加了以下代码,以尝试获得更好的数据: 这将打印每个新触摸事件的运行比率。当我在屏幕上旋转手指时,首先记录的比率是或或。这让我觉得这个测试不是很准确地测量时间。随着收集到更多的数据,比率往往在和