摆动渲染在 JDK 1.8 中显示为已损坏,在 JDK 1.7 中正确

2022-08-31 17:17:09

我已经安装了IntelliJ IDEA(13.1.1 #IC-135.480)和JDK 1.8.0(x64),并使用GUI表单设计器生成了一些GUI。

然后我运行了代码,并意识到有些事情不对劲。

这是我的GUI的屏幕截图:Buggy Rendering JDK 1.8.0

字体的呈现似乎不正常。此外,当我将鼠标移到按钮上时,按钮会丢失其文本。

所以我安装了JDK 1.7.0_40(x64),重新编译了项目并再次运行它。

当我使用JDK 1.7时,会出现以下表单:Rendering OK JDB 1.7.0_40

渲染似乎没问题,按钮也正常。

因此,我安装了最新的图形和芯片组驱动程序以及更多其他驱动程序,但问题仍然存在。你有没有遇到过这样的Java Swing UI问题?你能帮我解决我的问题吗?任何帮助将不胜感激。


更新:

我创建了一个只有1个JTextArea和1个JButton的小项目,我有同样的渲染问题。

根据Andrew Thompson的说法,我改变了setSize(),我从EDT开始。下面的示例:

package at.maeh.java.client.simpleTextClient;

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

public class SimpleClient extends JFrame {
    private JPanel panel1;
    private JTextArea textArea1 = new JTextArea();
    private JButton button1 = new JButton();

    public SimpleClient() {
        super("SimpleClient");

        // Panel
        panel1 = new JPanel();
        panel1.setLayout(new FlowLayout());

        // BUtton
        button1.setText("TestButton");

        // TextArea
        textArea1.setColumns(40);
        textArea1.setRows(15);

        // Add Components
        panel1.add(textArea1);
        panel1.add(button1);

        // Add to Frame
        this.getContentPane().add(panel1);

        // pack and set Visible
        pack();
        setVisible(true);

        System.out.println("Constructor EDT: " + SwingUtilities.isEventDispatchThread());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SimpleClient::new);

        System.out.println("Main EDT: " + SwingUtilities.isEventDispatchThread());
    }
}

结果是一个简单的JFrame,其中包含组件。

SimpleClient -> Screenshot immediately after Start

当我写一些文本,或者将鼠标指针放在按钮上时,组件会像这样呈现(文本:testsentence.123;按钮标签:测试按钮)

after writing - or mouse over


答案 1

对于那些问题尚未得到解决的人;试试这个解决方案:

在操作系统中将全局环境变量“J2D_D3D”设置为“false”。根据 Sun 的说法,此设置用于关闭 Java 2D 系统在 Java 1.4.1_02 及更高版本中对 Direct3D 的使用。

即:只需创建一个环境变量,名称为“J2D_D3D”,值“false”,不带引号。

这解决了我的渲染问题,希望它也能解决。


答案 2

最后,我找到了解决问题的方法。我不得不更改 NVIDIA GeForce 620M 的能量控制设置,以达到最佳性能。


推荐