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

时间:2014-03-29 22:08:28

标签: java swing rendering nvidia java-8

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

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

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

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

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

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

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

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


UPDATE:

我创建了一个只有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

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

after writing - or mouse over

8 个答案:

答案 0 :(得分:48)

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

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

ie:只需创建一个名为“J2D_D3D”的环境变量,而不使用引号创建值“false”。

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

答案 1 :(得分:13)

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

答案 2 :(得分:9)

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

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

答案 3 :(得分:8)

我有完全相同的问题。我在duffys质量设定调整后发现的:

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

在java bug跟踪器上找不到任何内容,另一方面很难描述这个bug。

答案 4 :(得分:2)

textArea1.setSize(500, 300);

有一个问题。 Java GUI可能必须在许多平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置或大小。要组织强大的GUI组件,而是使用布局管理器,或combinations of them 1 ,以及布局填充和& white space 2 的边框。

答案 5 :(得分:2)

戴尔Vostro 5480与ubuntu伙伴16.04我有类似的问题。 修复了使用额外驱动程序更改Nvidia驱动程序的问题。

enter image description here

选择NVidia个人资料。 enter image description here

答案 6 :(得分:1)

对duffy356的类似修复:

联想T430s与NVIDIA NVS 5200M和HD 4000一起运行Windows 7 64位。 更新到Java 8更新5为两个Swing应用程序,jEdit和Freemind创建了图形和按钮损坏。

使用NVIDIA控制面板小程序将电源管理模式的全局设置更改为"优先考虑最佳性能"看起来它解决了这个问题。

不确定应用设置大小的方式是否存在潜在问题。

答案 7 :(得分:0)

步骤进行:

  1. 控制面板
  2. 系统和安全
  3. 系统
  4. 远程设置
  5. 高级标签
  6. 点击环境变量
  7. 创建一个J2D_D3D变量
  8. 并将值设置为false。
  9. 为我工作,....