У меня есть приложение 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 в самой нижней части экрана.
У кого-нибудь есть идеи, что может вызвать это?
Что происходит, когда вы изменяете размер оставшегося окна, вызывая перерисовку? Кроме того, являются ли компоненты артефакта интерактивными или интерактивными для взаимодействия с пользователем? – LuigiEdlCarno
У вас есть дополнительная информация о машинах, на которых эта ошибка возникает? В частности, тип видеокарты (поставщик и, возможно, версия драйвера)? Или какое-либо стороннее программное обеспечение, которое выполнялось в фоновом режиме при возникновении этой ошибки? Тот факт, что это происходит на разных ОС и разных JRE, предполагает, что эти машины должны иметь что-то общее, что вызывает эту ошибку. – Marco13
@LuigiEdlCarno Изменение размера окна вызывает перерисовку, и артефакты исчезают. Компоненты артефактов не реагируют на взаимодействие пользователя. Если вы нажмете их (в случае скриншота), он выберет строку в этом месте в базовом JTable, и эта строка будет перекрашена. – Jason