Nice programing

스윙 렌더링이 JDK 1.8에서 깨진 것처럼 보임, JDK 1.7에서 수정 됨

nicepro 2020. 12. 30. 20:23
반응형

스윙 렌더링이 JDK 1.8에서 깨진 것처럼 보임, JDK 1.7에서 수정 됨


IntelliJ IDEA (13.1.1 # IC-135.480) 및 JDK 1.8.0 (x64)을 설치했으며 GUI 양식 디자이너로 일부 GUI를 생성했습니다.

그런 다음 코드를 실행하고 문제가 있음을 깨달았습니다.

다음은 내 GUI의 스크린 샷입니다. 버기 렌더링 JDK 1.8.0

글꼴의 렌더링이 정상이 아닌 것 같습니다. 추가로 Button은 텍스트를 잃어 버립니다.

그래서 JDK 1.7.0_40 (x64)을 설치하고 프로젝트를 재 컴파일하고 다시 실행했습니다.

JDK 1.7을 사용할 때 다음 양식이 나타납니다. OK JDB 1.7.0_40 렌더링

Rendering은 OK이고 버튼도 OK입니다.

그래서 최신 그래픽 및 칩셋 드라이버 등을 설치했지만 문제는 여전히 존재합니다. Java Swing UI에 이러한 문제가 있었던 적이 있습니까? 내 문제를 해결하도록 도와 줄 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.


최신 정보:

JTextArea 1 개와 JButton 1 개만있는 작은 프로젝트를 만들었는데 동일한 렌더링 문제가 있습니다.

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-> 시작 직후 스크린 샷

일부 텍스트를 작성하거나 마우스 포인터를 Button 위로 이동하면 구성 요소가 다음과 같이 렌더링됩니다 (Text : testsentence.123; Button-Label : TestButton).

쓰기 후-또는 마우스 오버


문제가 해결되지 않은 사람들을 위해; 이 솔루션을 시도하십시오.

OS 내에서 전역 환경 변수 "J2D_D3D"를 "false"로 설정합니다. Sun에 따르면이 설정은 Java 1.4.1_02 이상에서 Java 2D 시스템의 Direct3D 사용을 끄는 데 사용됩니다.

즉 : 이름이 "J2D_D3D"이고 값이 "false"인 환경 변수를 따옴표없이 만듭니다.

이것은 내 렌더링 문제를 해결했습니다.


마침내 내 문제에 대한 해결책을 찾았습니다. NVIDIA GeForce 620M의 에너지 제어 설정을 최대 성능으로 변경해야했습니다.


다음 단계를 따를 수 있습니다.

  1. 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 NVIDIA 제어판을 클릭합니다.
  2. 왼쪽 창에서 '3D 설정 관리'를 선택합니다.
  3. 기본 창에서 "프로그램 설정"탭을 선택합니다.
  4. '추가'를 클릭하십시오.
  5. Java 폴더 (C : \ Program Files \ Java \ jre1.8.0_20 \ bin)로 이동하고 javaw.exe를 선택하고 '열기'를 누릅니다 (이 단계는 운영 체제에 따라 다르지만 찾기가 매우 쉽습니다).
  6. '이 프로그램에 대해 선호하는 그래픽 프로세서 선택'이라고 표시된 곳에서 드롭 다운을 클릭하고 '고성능 NVIDIA 프로세서'를 선택합니다.
  7. 오른쪽 하단의 '적용'을 클릭하면됩니다.

나는 똑같은 문제가 있습니다. duffys 품질 설정 조정 후 찾은 내용 :

내 노트북은 Intel HD 4000과 NVS 5200M을 모두 실행합니다. Java 7로 Swing 애플리케이션을 실행하는 것은 두 카드 모두에서 문제가 없습니다. 인텔 카드 (품질 설정에 관계없이)로 렌더링 된 Java 8 Swing GUI를 사용하면 예전처럼 보이는 NVS 5200M을 사용하여 무너져 보입니다 (duffys 스크린 샷에서와 같이).

자바 버그 추적기에서 아무것도 찾을 수 없지만,이 버그를 설명하기는 어렵습니다.


textArea1.setSize(500, 300);

문제가 있습니다. Java GUI는 다양한 화면 해상도 및 다양한 PLAF를 사용하여 여러 플랫폼에서 작동해야 할 수 있습니다. 따라서 구성 요소의 정확한 배치 또는 크기 조정도움이되지 않습니다 . 강력한 GUI를위한 구성 요소를 구성하려면 대신 레이아웃 관리자 또는 이들의 조합 1 , 공백 2에 대한 레이아웃 패딩 및 테두리와 함께 사용하십시오 .


우분투 메이트 16.04가 포함 된 Dell Vostro 5480 비슷한 문제가있었습니다. 추가 드라이버를 사용하여 Nvidia 드라이버를 변경하는 문제가 수정되었습니다.

여기에 이미지 설명 입력

그리고 NVidia 프로필을 선택합니다. 여기에 이미지 설명 입력


duffy356에 대한 유사한 수정 :

HD 4000과 함께 NVIDIA NVS 5200M과 함께 Windows 7 64 비트를 실행하는 Lenovo T430s. Java 8 업데이트 5로 업데이트하면 두 개의 Swing 앱인 jEdit 및 Freemind에 대한 그래픽 및 버튼 손상이 발생했습니다.

NVIDIA 제어판 애플릿을 사용하여 전원 관리 모드의 전역 설정을 "최대 성능 선호"로 변경하면이 문제가 해결 된 것처럼 보입니다.

앱이 크기를 설정하는 방법에 숨어있는 문제가 있는지 확실하지 않습니다.


단계 :

  1. 제어판
  2. 시스템과 보안
  3. 체계
  4. 원격 설정
  5. 고급 탭
  6. 환경 변수를 클릭하십시오.
  7. J2D_D3D 변수 생성
  8. 값을 false로 설정하십시오.

나를 위해 일했다 .....

참조 URL : https://stackoverflow.com/questions/22737535/swing-rendering-appears-broken-in-jdk-1-8-correct-in-jdk-1-7

반응형