gpt4 book ai didi

Java 2D 性能缓慢 - 调整大小

转载 作者:行者123 更新时间:2023-12-01 04:39:19 24 4
gpt4 key购买 nike

我使用的是带 Aero 的 Windows 7,并拥有用于游戏的速度非常快的显卡 (Radeon 6870)。

在调整用 java 编写的非常简单的程序大小时,我遇到了一些问题。例如,这个程序完全不执行任何操作。它没有 Action 监听器,没有循环。它只是一个带有按钮的 GUI 界面。

关闭 OpenGL 加速时调整大小:

[View fullscreen] Sluggish resizing

调整组件大小大约需要一秒钟。对我来说,这是非常引人注目的。

使用 OpenGL 加速调整大小:

enter image description here

我尝试启用OpenGl加速来解决这个问题。我编译了 JAR 并使用 java -Dsun.java2d.opengl=true -jar C:\Test.jar 运行它。结果是窗口周围的黑色区域稍微减少,但闪烁更多。事实上,闪烁在上面的屏幕截图中显示为灰色。

其他软件中是否存在此问题?

没有。 Eclipse、Netbeans、Chrome 等应用程序均经过测试。没有人有这个问题。因此我必须得出结论,代码一定存在问题。许多人运行过这段代码并表示“没有问题”。如果您要测试它,请确保将窗口大小从屏幕的最小尺寸调整到最大尺寸,同时以圆周运动移动鼠标。

代码:

import java.awt.*;
import javax.swing.*;

public class JFrameWithButtonsTest {
private int iScreen = 25;
private int iLocation = 10;
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();

public JFrameWithButtonsTest() {
JPanel northButtonPanel = new JPanel();
northButtonPanel.setLayout(new GridLayout(2,2));
northButtonPanel.add(new JButton(" I do nothing"));
northButtonPanel.add(new JButton(" I do nothing"));
northButtonPanel.add(new JButton(" I do nothing"));
northButtonPanel.add(new JButton(" I do nothing"));
contentPane.add(northButtonPanel, BorderLayout.NORTH);

JPanel southButtonPanel = new JPanel();
southButtonPanel.setLayout(new GridLayout(2,2));
southButtonPanel.add(new JButton(" I do nothing"));
southButtonPanel.add(new JButton(" I do nothing"));
southButtonPanel.add(new JButton(" I do nothing"));
southButtonPanel.add(new JButton(" I do nothing"));
contentPane.add(southButtonPanel, BorderLayout.SOUTH);

JPanel eastButtonPanel = new JPanel();
eastButtonPanel.setLayout(new GridLayout(2,2));
eastButtonPanel.add(new JButton(" I do nothing"));
eastButtonPanel.add(new JButton(" I do nothing"));
eastButtonPanel.add(new JButton(" I do nothing"));
eastButtonPanel.add(new JButton(" I do nothing"));
contentPane.add(eastButtonPanel, BorderLayout.EAST);

boolean packFrame = false;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
frameSize.height = (int) (iScreen * screenSize.height / 100);
frameSize.width = (int) (iScreen * screenSize.width / 100);
frame.setSize(frameSize);
frame.setLocation((screenSize.width - frameSize.width) / iLocation,
(screenSize.height - frameSize.height) / iLocation);
if (packFrame) {
frame.pack();
packFrame = true;
} else {
frame.validate();
}
frame.setVisible(true);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JFrameWithButtonsTest();
}
});
}
}

请注意,如果没有此行,问题仍然存在:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

最佳答案

我开始注意到我最近的两个 Java 程序中的这一点。

我查看了 NetBeans 的配置文件,发现以下内容可以大大改善情况:

  public static void main(final String... args) {
System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString());
...

与 JVM 命令行上的 -Dsun.java2d.noddraw=true 相同。

关于Java 2D 性能缓慢 - 调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16846350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com