Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing渲染在JDK1.8中出现中断,在JDK1.7中正确_Java_Swing_Rendering_Nvidia_Java 8 - Fatal编程技术网

Java Swing渲染在JDK1.8中出现中断,在JDK1.7中正确

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时,会出现以下表单: 渲染似乎正常,按钮也正常 所以我安装了最新的图形和芯片组驱动程序等等,但问题仍然存在。

我已经安装了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时有过这样的问题吗?你能帮我解决我的问题吗? 任何帮助都将不胜感激


更新: 我创建了一个只有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”且不带引号的环境变量


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

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

  • 右键单击桌面,然后单击NVIDIA控制面板
  • 在左窗格中选择“管理三维设置”
  • 在主窗口中选择“程序设置”选项卡
  • 单击“添加”
  • 导航到java文件夹(C:\Program Files\java\jre1.8.0\u 20\bin),选择javaw.exe并按“打开”(此步骤可能取决于您的操作系统,但应该很容易找到)
  • 如果显示“选择此程序的首选图形处理器”,请单击下拉列表并选择“高性能NVIDIA处理器”
  • 单击右下角的“应用”,您就可以开始了
  • 步骤:

  • 控制面板
  • 系统与安全
  • 系统
  • 远程设置
  • 高级选项卡
  • 单击环境变量
  • 创建一个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);