Рендеринг Swing выглядит сломанным в JDK 1.8, правильно в JDK 1.7



Я установил IntelliJ IDEA (13.1.1 #IC-135.480) и JDK 1.8.0 (x64), и я создал некоторый графический интерфейс с помощью конструктора форм GUI.



затем я запустил код и понял, что что-то не так.



вот скриншот моего GUI:
Buggy Rendering JDK 1.8.0



рендеринг шрифта, кажется, не в порядке. Кроме того, кнопка теряет свой текст, когда я наведу на него курсор мыши.



поэтому я установил JDK 1.7.0_40 (x64), перекомпилировал проект и запустил его снова.



следующая форма появляется, когда я использую JDK 1.7:
Rendering OK JDB 1.7.0_40



рендеринг, кажется, в порядке, и кнопка также в порядке.



поэтому я установил новейшие графические и чипсетные драйверы и многое другое, но проблема все еще существует.
У вас когда-нибудь были такие проблемы с Java Swing UIs? Не могли бы вы помочь мне решить мои проблемы?
Любая помощь будет очень признательна.





обновление:



Я создал небольшой проект только с 1 JTextArea и 1 JButton и у меня есть те же проблемы рендеринга.



согласно Эндрю Томпсону я изменил 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 -> Screenshot immediately after Start



когда я пишу какой-то текст или moove мой указатель мыши над кнопкой компоненты получают визуализацию следующим образом (текст: testsentence.123; Button-Label: TestButton)



after writing - or mouse over

596   8  

8 ответов:

для тех, чья проблема не решена, попробуйте это решение:

установите глобальную переменную среды "J2D_D3D" в значение "false" внутри ОС. Согласно Sun, этот параметр используется для отключения использования системы Java 2D Direct3D в Java 1.4.1_02 и более поздних версиях.

ie: просто создайте переменную среды с именем " 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 adjustion:

мой ноутбук работает как с Intel HD 4000, так и с NVS 5200M. запуск приложений Swing с Java 7 отлично подходит для обеих карт. С Java 8 Swing GUI, отображаемые картой Intel (независимо от настроек качества), выглядят разрушенными (как на скриншоте duffys), используя NVS 5200M, они выглядят так же, как и раньше.

не удалось найти ничего на Java bug tracker, с другой стороны, это трудно опишите эту ошибку.

textArea1.setSize(500, 300);

есть проблема. Java-графические интерфейсы могут работать на нескольких платформах, на разных разрешениях экрана и с использованием разных Плафов. Как таковые они не способствуют точному размещению размер компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеры макетов или комбинаций из них1, вместе с прокладкой макета и границами для пробел2.

Dell Vostro 5480 с ubuntu mate 16.04 у меня была аналогичная проблема. Исправлено изменение драйвера Nvidia с помощью дополнительного драйвера.

enter image description here

и выберите профиль NVidia. enter image description here

аналогичное исправление для duffy356:

Lenovo T430s работает под управлением Windows 7 64 бит с NVIDIA NVS 5200M наряду с HD 4000. Обновление до Java 8 update 5 создано графика и коррупция кнопки для двух приложений Swing, jEdit и Freemind.

использование апплета панели управления NVIDIA для изменения глобальных настроек режима управления питанием на "предпочитаю максимальную производительность" похоже, что он исправил эту проблему.

Не уверен, что есть скрытая проблема с тем, как установлены приложения размеры.

действия:

  1. панель управления
  2. система и безопасность
  3. система
  4. параметры удаленного доступа
  5. вкладка
  6. нажмите кнопку переменные среды
  7. создать переменную J2D_D3D
  8. и установите значение false.

работал для меня....

Comments

    Ничего не найдено.