2014-02-10 2 views
3

У меня есть приложение Swing с какой-то проблемой перекраски. Когда экран (JFrame) закрыт, артефакты с этого экрана иногда окрашиваются поверх других экранов. Он полностью невоспроизводим на 100 + машинах разработчика в нашем офисе и большинстве тысяч пользователей, использующих это программное обеспечение. В течение последних нескольких лет были разбросаны сообщения об этой проблеме, но мы всегда обвиняли их в видеокарте или драйвере. Количество сообщений о проблеме резко возросло, хотя за последние несколько месяцев нам нужно выяснить реальную причину.Java Swing экранные артефакты

Практически все наши клиенты работают в Windows, и это затрагивает как машины Windows 7, так и 8. Обычно мы запускаем JRE 1.6.0_29, но проблема также происходит на 1.6.0_45 и 1.7.0_51.

На рисунке ниже показана проблема. Я изложил артефакт в красном - это часть другого JFrame, который был закрыт. Когда JFrame был виден, он не находился в этом месте на экране. Также обратите внимание, что столбцы JTable чуть выше артефактов не соответствуют строкам. Наконец, обратите внимание, что артефакт не окрашен только над JTable, а над его родительским JScrollPane и отдельной JPanel в самой нижней части экрана.

У кого-нибудь есть идеи, что может вызвать это?

enter image description here

+1

Что происходит, когда вы изменяете размер оставшегося окна, вызывая перерисовку? Кроме того, являются ли компоненты артефакта интерактивными или интерактивными для взаимодействия с пользователем? – LuigiEdlCarno

+0

У вас есть дополнительная информация о машинах, на которых эта ошибка возникает? В частности, тип видеокарты (поставщик и, возможно, версия драйвера)? Или какое-либо стороннее программное обеспечение, которое выполнялось в фоновом режиме при возникновении этой ошибки? Тот факт, что это происходит на разных ОС и разных JRE, предполагает, что эти машины должны иметь что-то общее, что вызывает эту ошибку. – Marco13

+0

@LuigiEdlCarno Изменение размера окна вызывает перерисовку, и артефакты исчезают. Компоненты артефактов не реагируют на взаимодействие пользователя. Если вы нажмете их (в случае скриншота), он выберет строку в этом месте в базовом JTable, и эта строка будет перекрашена. – Jason

ответ

5

Для того, чтобы иметь этот вопрос «закрыто» (т.е. ответил) здесь, результат от комментариев:

Marco13: Хотя я никогда не сталкивался с такой ошибки, ее может быть стоит попробовать -Dsun.java2d.opengl = истинным или ложным -Dsun.java2d.d3d =

(обращаясь к флагам VM перечисленных в http://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html#d3d)

Jason: Добавление -Dsun.java2s.d3d исправило проблему.

(я предполагаю, что это относится к установке -Dsun.java2s.d3d = ложных, поскольку она включена по умолчанию)


Что касается вопроса от последнего комментария:

"Считаете ли вы, что какое-то преимущество в производительности для поддержки Direct3D (для приложения ввода данных)?"

Я еще не использовал флаг d3d, но только флаг opengl, для некоторых экспериментов, а не для тестов производительности. Поэтому я не знаю, насколько этот флаг заметно влияет на производительность. Опять же, мое чувство кишки заключается в том, что для простых приложений это не должно иметь заметного эффекта. С «простым» я имею в виду приложения, которые используют только стандартные компоненты графического интерфейса, и не выполняют сложные операции пользовательского рендеринга с помощью Graphics2D in в переопределенном методе paintComponent. Но, согласно скриншоту, это приложение может по крайней мере включать в себя самый сложный «стандартный компонент GUI», который существует в Swing, а именно JTable. Поэтому, если у вас есть, например, большой JTable в ScrollPane, возможно, со сложными пользовательскими CellRenderers, вы должны рассмотреть специальный тест влияния производительности на некоторые (предпочтительно самые медленные) целевые машины, если это возможно.

2

"-Dsun.java2d.opengl = true" сделал трюк для меня, когда у меня возникла аналогичная проблема с jTables.

Однако «-Dsun.java2d.d3d = false» не оказало мне никакого удовлетворения.

Смежные вопросы