스윙 렌더링이 JDK 1.8에서 깨진 것처럼 보임, JDK 1.7에서 수정 됨
IntelliJ IDEA (13.1.1 # IC-135.480) 및 JDK 1.8.0 (x64)을 설치했으며 GUI 양식 디자이너로 일부 GUI를 생성했습니다.
그런 다음 코드를 실행하고 문제가 있음을 깨달았습니다.
다음은 내 GUI의 스크린 샷입니다.
글꼴의 렌더링이 정상이 아닌 것 같습니다. 추가로 Button은 텍스트를 잃어 버립니다.
그래서 JDK 1.7.0_40 (x64)을 설치하고 프로젝트를 재 컴파일하고 다시 실행했습니다.
JDK 1.7을 사용할 때 다음 양식이 나타납니다.
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이 생성됩니다.
일부 텍스트를 작성하거나 마우스 포인터를 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의 에너지 제어 설정을 최대 성능으로 변경해야했습니다.
다음 단계를 따를 수 있습니다.
- 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 NVIDIA 제어판을 클릭합니다.
- 왼쪽 창에서 '3D 설정 관리'를 선택합니다.
- 기본 창에서 "프로그램 설정"탭을 선택합니다.
- '추가'를 클릭하십시오.
- Java 폴더 (C : \ Program Files \ Java \ jre1.8.0_20 \ bin)로 이동하고 javaw.exe를 선택하고 '열기'를 누릅니다 (이 단계는 운영 체제에 따라 다르지만 찾기가 매우 쉽습니다).
- '이 프로그램에 대해 선호하는 그래픽 프로세서 선택'이라고 표시된 곳에서 드롭 다운을 클릭하고 '고성능 NVIDIA 프로세서'를 선택합니다.
- 오른쪽 하단의 '적용'을 클릭하면됩니다.
나는 똑같은 문제가 있습니다. 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 드라이버를 변경하는 문제가 수정되었습니다.
duffy356에 대한 유사한 수정 :
HD 4000과 함께 NVIDIA NVS 5200M과 함께 Windows 7 64 비트를 실행하는 Lenovo T430s. Java 8 업데이트 5로 업데이트하면 두 개의 Swing 앱인 jEdit 및 Freemind에 대한 그래픽 및 버튼 손상이 발생했습니다.
NVIDIA 제어판 애플릿을 사용하여 전원 관리 모드의 전역 설정을 "최대 성능 선호"로 변경하면이 문제가 해결 된 것처럼 보입니다.
앱이 크기를 설정하는 방법에 숨어있는 문제가 있는지 확실하지 않습니다.
단계 :
- 제어판
- 시스템과 보안
- 체계
- 원격 설정
- 고급 탭
- 환경 변수를 클릭하십시오.
- J2D_D3D 변수 생성
- 값을 false로 설정하십시오.
나를 위해 일했다 .....
'Nice programing' 카테고리의 다른 글
Firebase 단순 사용자 이름 및 비밀번호 인증을 사용하는 경우 사용자 목록을 반환하려면 어떻게해야합니까? (0) | 2020.12.30 |
---|---|
루트 이름으로 Json.NET 직렬화 객체 (0) | 2020.12.30 |
main을 배열로 선언하는 이유는 무엇입니까? (0) | 2020.12.30 |
Android 빌드 gradle이 너무 느림 (종속성 해결) (0) | 2020.12.30 |
모듈이 모의 해제되었을 때 Jest에서 가져온 명명 된 함수를 모의하는 방법 (0) | 2020.12.30 |