Rendering Swing jest uszkodzony w JDK 1.8, poprawny w JDK 1.7

Zainstalowałem IntelliJ IDEA (13.1.1 #IC-135.480) i JDK 1.8.0 (x64) i wygenerowałem trochę GUI z GUI Form designer.

Potem uruchomiłem kod i zdałem sobie sprawę, że coś jest nie w porządku.

Oto zrzut ekranu mojego GUI: Buggy Rendering JDK 1.8.0

Renderowanie czcionki wydaje się nie być w porządku. Dodatkowo przycisk traci swój tekst, gdy przesuwam mysz nad nim.

Więc zainstalowałem JDK 1.7.0_40 (x64), przekompilowałem projekt i uruchomiłem go ponownie.

The pojawia się następujący formularz, gdy używam JDK 1.7: Rendering OK JDB 1.7.0_40

Renderowanie wydaje się być w porządku, a przycisk jest również w porządku.

Więc zainstalowałem najnowsze sterowniki grafiki i chipsetu i wiele więcej, ale problem nadal istnieje. Czy kiedykolwiek miałeś takie problemy z Java Swing UIs? Pomożesz mi rozwiązać moje problemy? Każda pomoc będzie bardzo mile widziana.


Aktualizacja:

Stworzyłem mały projekt z tylko 1 JTextArea i 1 JButton i mam ten sam rendering problemy.

Według Andrew Thompsona zmieniłem setSize () i zaczynam od EDT. Przykład poniżej:

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());
    }
}

Rezultatem jest prosty JFrame z komponentami w nim.

SimpleClient - > zrzut ekranu natychmiast po uruchomieniu

Kiedy piszę jakiś tekst lub moove my mousePointer nad przyciskiem komponenty są renderowane w ten sposób (Text: testsentence.123; Button-Label: TestButton)

po napisaniu-lub myszką nad

Author: duffy356, 2014-03-30

8 answers

Dla tych, których problem nie został rozwiązany; spróbuj tego rozwiązania:

Ustaw globalną zmienną środowiskową "J2D_D3D" na "false" wewnątrz systemu operacyjnego. Według Sun, to ustawienie jest używane do wyłączenia korzystania z Direct3D w Javie 1.4.1_02 i nowszych.

Ie: po prostu Utwórz zmienną środowiskową o nazwie "J2D_D3D" i wartości "false" bez cudzysłowów.

To rozwiązało moje problemy z renderowaniem, mam nadzieję, że Twoje również.

 48
Author: 25mhz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 14:00:47

W końcu znalazłem rozwiązanie mojego problemu. Musiałem zmienić ustawienia kontroli energii w moim NVIDIA GeForce 620M do maksymalnej wydajności.

 13
Author: duffy356,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 16:11:01

Możesz wykonać następujące kroki:

  1. Kliknij prawym przyciskiem myszy na pulpicie i kliknij Panel sterowania NVIDIA
  2. Wybierz "Zarządzaj ustawieniami 3D" w lewym okienku
  3. Wybierz zakładkę "Ustawienia programu" w głównym oknie
  4. Kliknij "Dodaj"
  5. Przejdź do folderu java (C:\Program Files \ Java \ jre1. 8. 0_20 \ bin) i wybierz javaw.exe i naciśnij "Otwórz" (ten krok prawdopodobnie zależy od systemu operacyjnego, ale powinien być dość łatwy do znalezienia)
  6. Gdzie jest napisane ' Wybierz preferowany procesor graficzny dla tego programu "kliknij rozwijaną listę i wybierz" wysokowydajny procesor NVIDIA "
  7. Kliknij "Zastosuj" w prawym dolnym rogu i możesz zaczynać.
 9
Author: Lord ST,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-04 17:34:11

Mam dokładnie ten sam problem. Co znalazłem po ustawieniu jakości duffys:

Mój Notebook obsługuje zarówno Intel HD 4000, jak i NVS 5200M. uruchamianie aplikacji Swing z Javą 7 jest dobre na obu kartach. Z Java 8 Swing GUI renderowane przez kartę Intela (bez względu na ustawienia jakości) wyglądają zgnieciony (jak w Duffys Screenshot), przy użyciu NVS 5200M wyglądają tak, jak kiedyś.

Nie można znaleźć nic na java bug tracker, z drugiej strony trudno to opisać bug.

 8
Author: nbred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 15:16:52
textArea1.setSize(500, 300);
Jest problem. GUI Javy mogą działać na wielu platformach, w różnych rozdzielczościach ekranu i przy użyciu różnych Plafów. Jako takie nie sprzyjają one dokładnemu rozmieszczeniu lub wymiarowaniu składników. Aby zorganizować komponenty dla solidnego GUI, zamiast tego użyj menedżerów układu lub ich kombinacji 1, wraz z wypełnieniem i obramowaniami układu dla white space2.
 2
Author: Andrew Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:02

Dell Vostro 5480 z ubuntu mate 16.04 miałem podobny problem. Naprawiono zmianę sterownika Nvidia, używając dodatkowego sterownika.

Tutaj wpisz opis obrazka

I wybierz Profil NVidia. Tutaj wpisz opis obrazka

 2
Author: Rafael Gimenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 09:51:43

Podobne poprawki do duffy356:

Lenovo T430s z systemem Windows 7 64 bit z NVIDIA NVS 5200M obok HD 4000. Aktualizacja do Java 8 update 5 stworzyła grafikę i uszkodzenie przycisków dla dwóch aplikacji Swing, jEdit i Freemind.

Używanie apletu Panelu sterowania NVIDIA do zmiany ustawień globalnych trybu zarządzania zasilaniem na "preferuj maksymalną wydajność" wygląda na to, że Naprawiono ten problem.

Nie wiem, czy nie ma problemu z ustawianiem rozmiarów aplikacji.

 1
Author: Halfabee2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-07 12:18:19

Kroki:

  1. Panel sterowania
  2. system i bezpieczeństwo
  3. system
  4. Ustawienia zdalne
  5. Zakładka zaawansowana
  6. Kliknij zmienne środowiskowe
  7. Utwórz zmienną J2D_D3D
  8. i ustaw wartość na false.

Pracował dla mnie,....

 0
Author: Vishal Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-10 00:18:51