在JDK 1.8中,Swing渲染显得破坏,在JDK 1.7中更正

duf*_*356 56 java swing rendering nvidia java-8

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

然后我运行代码并意识到某些事情是不正常的.

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

Font的渲染似乎不合适.另外,当我将鼠标移到它上面时,Button会丢失其文本.

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

当我使用JDK 1.7时,会出现以下表格: 渲染OK JDB 1.7.0_40

渲染似乎没问题,按钮也没关系.

所以我安装了最新的Graphics和Chipset驱动程序等等,但问题仍然存在.您是否遇到过Java Swing UI这样的问题?你能帮我解决一下我的问题吗?任何帮助将不胜感激.


更新:

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

据安德鲁汤普森说,我改变了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());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是一个带有组件的简单JFrame.

SimpleClient  - > Start后的屏幕截图

当我写一些Text,或者将我的mousePointer移动到Button上时,组件会像这样呈现(Text:testsentence.123; Button-Label:TestButton)

写完后 - 或鼠标悬停

25m*_*mhz 49

对于那些问题尚未解决的人; 尝试此解决方案:

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

即:只需创建一个名为"J2D_D3D"的环境变量,而不使用引号创建值"false".

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

  • 命令行选项`-Dsun.java2d.d3d = false`也应该有效. (13认同)
  • 这确实解决了我的问题,但是哇......我们怎么能指望客户这样做呢? (5认同)
  • 这对我也有帮助!我不做java编程,只是使用一些applet.在java更新之后,我也开始体验这个令人讨厌的渲染错误. (2认同)

duf*_*356 13

最后我找到了解决问题的方法.我不得不将NVIDIA GeForce 620M的能量控制设置更改为最高性能.

  • 这不是一个解决方案,它是一种解决方法,因为您不希望要求应用程序的最终用户执行此操作. (18认同)

Lor*_* ST 9

您可以按照以下步骤操作:

  1. 右键单击桌面,然后单击NVIDIA控制面板
  2. 在左侧窗格中选择"管理3D设置"
  3. 在主窗口中选择"程序设置"选项卡
  4. 点击"添加"
  5. 导航到您的java文件夹(C:\ Program Files\Java\jre1.8.0_20\bin)并选择javaw.exe并按"打开"(此步骤可能取决于您的操作系统,但应该很容易找到)
  6. 如果选择"为此程序选择首选图形处理器",请单击下拉列表并选择"高性能NVIDIA处理器"
  7. 点击右下方的"应用",你就可以开始了.


小智 8

我有完全一样的问题.在duffys质量设定调整后我发现了什么:

我的笔记本电脑同时运行Intel HD 4000和NVS 5200M.使用Java 7运行Swing应用程序在两张卡上都可以.使用英特尔卡呈现的Java 8 Swing GUI(无论质量设置如何)看起来像粉碎(如duffys屏幕截图),使用NVS 5200M,它们看起来像以前一样.

在java bug跟踪器上找不到任何东西,另一方面很难描述这个bug.