Java Swing渲染在JDK1.8中出现中断,在JDK1.7中正确
我已经安装了IntelliJ IDEA(13.1.1#IC-135.480)和JDK 1.8.0(x64),并使用GUI表单设计器生成了一些GUI 然后我运行了代码,意识到有些事情不对劲 以下是我的GUI的屏幕截图: 字体的呈现似乎不正常。此外,当我将鼠标移到按钮上时,按钮会松开其文本 因此,我安装了JDK1.7.0_40(x64),重新编译了该项目并再次运行 当我使用JDK 1.7时,会出现以下表单: 渲染似乎正常,按钮也正常 所以我安装了最新的图形和芯片组驱动程序等等,但问题仍然存在。 您在使用Java Swing UI时有过这样的问题吗?你能帮我解决我的问题吗? 任何帮助都将不胜感激Java Swing渲染在JDK1.8中出现中断,在JDK1.7中正确,java,swing,rendering,nvidia,java-8,Java,Swing,Rendering,Nvidia,Java 8,我已经安装了IntelliJ IDEA(13.1.1#IC-135.480)和JDK 1.8.0(x64),并使用GUI表单设计器生成了一些GUI 然后我运行了代码,意识到有些事情不对劲 以下是我的GUI的屏幕截图: 字体的呈现似乎不正常。此外,当我将鼠标移到按钮上时,按钮会松开其文本 因此,我安装了JDK1.7.0_40(x64),重新编译了该项目并再次运行 当我使用JDK 1.7时,会出现以下表单: 渲染似乎正常,按钮也正常 所以我安装了最新的图形和芯片组驱动程序等等,但问题仍然存在。
更新: 我创建了一个只有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
启动后立即截图“>
当我写一些文本,或将鼠标指针放在按钮上时,组件呈现如下(文本:test句子.123;按钮标签:TestButton)
存在一个问题。Java GUI可能必须在多个平台、不同的屏幕分辨率和使用不同的PLAF上工作。因此,它们不利于组件的精确放置或大小调整。要组织组件以获得一个健壮的GUI,请使用布局管理器或1,以及布局填充和边框2
最后,我找到了问题的解决方案。我必须将NVIDIA GeForce 620M的能量控制设置更改为最高性能。我也遇到了完全相同的问题。在调整达菲质量设置后,我发现: 我的笔记本同时运行Intel HD 4000和NVS 5200M。使用Java 7在两张卡上运行Swing应用程序都很好。使用Intel卡呈现的Java 8 Swing GUI(无论质量设置如何),使用NVS 5200M,它们看起来像以前一样崩溃(如duffys屏幕截图所示)
在java bug tracker上找不到任何东西,另一方面,很难描述此bug。类似于duffy356的修复: 联想T430s运行Windows 7 64位,配有NVIDIA NVS 5200M和HD 4000。 Java 8更新5为两个Swing应用程序jEdit和Freemind创建了图形和按钮损坏 使用英伟达控制面板小程序来改变电源管理模式的全局设置,以“喜欢最大性能”看起来好像解决了这个问题。
不确定应用程序如何设置大小是否存在潜在问题。对于问题尚未解决的用户,请尝试以下解决方案: 在操作系统内部,将全局环境变量“J2D_D3D”设置为“false”。 根据Sun的说法,此设置用于在Java 1.4.1_02及更高版本中关闭Java 2D系统对Direct3D的使用 ie:只需创建一个名为“J2D_D3D”且值为“false”且不带引号的环境变量
这解决了我的渲染问题,希望也解决了你的问题。您可以按照以下步骤操作:
为我工作,。Dell Vostro 5480和ubuntu mate 16.04我遇到了类似的问题。 它是固定的改变英伟达驱动程序,使用一个额外的驱动程序。
并选择英伟达公司简介。
你能不能创建一个较小的示例,并包含必要的代码,让我们自己测试它?嗨,我做了一个较小的项目,只有一个文本区域和一个按钮,我也有同样的问题。我压缩了它-你可以从这里下载:为了方便所有读者,最好将代码包含在问题本身。@duffy356:我认为Vulcan的意思是一个压缩文件,而不是一个包含整个项目的zip文件。原因是任何人都可以复制我们的代码并快速测试它。这种呈现太差了,我真的不想责怪(一个官方的)JDK1.8版本本身——有很多测试(和beta测试人员)对于现在的Java SDK/REs..在IntelliJ之外针对/使用Java 8 SDK进行编译时会发生什么情况?如果存在相同的问题,则可以删除另一个变量和IntelliJ IDEA标记(这其实并不重要)可以删除。或者,如果IDEA设置有问题,则可以更深入地探讨。此外,在该系统上针对JRE 8运行其他Java Swing程序时会发生什么?嗨,我的问题不是间距。间距很好。我认为渲染问题与我的系统有关。因为它适用于其他用户s(见上面的注释)。“因为它适用于其他用户(见上面的注释)。”是的,我已经看到了它们。这意味着什么都没有,事实上,这是显式设置大小的常见标志之一-在一台机器上正常工作,在其他机器上失败。发布不设置大小的代码,使用
pack()
并在EDT上启动GUI。否则,此问答将毫无意义地浪费时间
textArea1.setSize(500, 300);