Swing呈现在JDK 1.8中出现中断,在JDK 1.7中正确

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

然后我运行代码,并意识到有些事情是不正确的。

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

字体的渲染似乎是不正确的。 另外,当我将鼠标移到它上面时,button会松动它的文本。

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

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

渲染似乎是确定的,button也是可以的。

所以我安装了最新的显卡和芯片组驱动程序等等,但问题依然存在。 你有过使用Java Swing UI的问题吗? 你能帮我解决我的问题吗? 任何帮助将不胜感激。


更新:

我创build了一个只有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()); } } 

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

SimpleClient  - >截图后立即开始

当我写一些文本,或者将鼠标指针移动到button上时,组件就会像这样呈现(Text:testsentence.123; Button-Label:TestButton)

写完之后 - 或者将鼠标悬停

对于那些问题没有解决的人, 试试这个解决scheme

在OS内设置全局环境variables“J2D_D3D”为“false”。 根据Sun的说法,这个设置用于在Java 1.4.1_02及更高版本中closuresJava 2D系统对Direct3D的使用。

即:只需创build名称为“J2D_D3D”的环境variables,并且不带引号的值为“false”。

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

最后我find了我的问题的解决scheme。 我不得不改变我的NVIDIA GeForce 620M的能源控制设置,以达到最佳性能。

我也有完全一样的问题。 我发现后,质量设置调整:

我的笔记本电脑同时运行Intel HD 4000和NVS 5200M。 使用Java 7运行Swing应用程序在两张卡上都可以。 使用英特尔卡呈现的Java 8 Swinggraphics用户界面(不pipe质量设置如何),看起来像使用NVS 5200M一样崩溃(如在duffys屏幕截图中)。

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

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

  1. 右键单击桌面,然后单击NVIDIA控制面板
  2. select左侧窗格中的“pipe理3D设置”
  3. 在主窗口中select“程序设置”选项卡
  4. 点击“添加”
  5. 导航到你的java文件夹(C:\ Program Files \ Java \ jre1.8.0_20 \ bin)并selectjavaw.exe并按'打开'(这一步可能取决于你的操作系统,但应该很容易find)
  6. 在select“为此程序select首选graphics处理器”的地方,单击下拉菜单并select“高性能NVIDIA处理器”
  7. 点击右下angular的“应用”,你就可以走了。
 textArea1.setSize(500, 300); 

有一个问题。 Java GUI可能需要在多种平台上工作,使用不同的屏幕分辨率和使用不同的PLAF。 因此,它们不利于部件的准确放置或尺寸确定 。 要组织强大的GUI组件,请使用布局pipe理器或它们的组合 1 ,以及用于空白区域 2的布局填充和边框。

戴尔Vostro 5480与Ubuntu的伴侣16.04我有一个类似的问题。 它是固定的更改Nvidia驱动程序,使用额外的驱动程序。

在这里输入图像描述

并selectNVidiaconfiguration文件。 在这里输入图像描述

类似的修复duffy356:

联想T430s与NVIDIA NVS 5200M一起运行Windows 7 64位以及HD 4000.更新到Java 8更新5创build了两个Swing应用程序jEdit和Freemind的graphics和button损坏。

使用NVIDIA控制面板小程序将电源pipe理模式的全局设置更改为“首选最佳性能”看起来像解决了这个问题。

不知道应用程序的设置大小是否存在潜在的问题。

步骤:1.控制面板2.系统和安全3.系统4.远程设置5.高级选项卡6.点击环境variables7.创buildJ2D_D3Dvariables8.并将值设置为false。 为我工作,….