У меня есть JOptionPane с настраиваемой панелью сообщений в приложении, предназначенном для Java 1.5. Панель содержит, помимо прочего, JTextField. Каждые 20 вызовов или около того ничего в диалоговом окне не отображается (даже кнопки ОК / Отмена). Если я перетащу диалоговое окно за пределы экрана и вернусь обратно, чтобы вызвать перерисовку, компоненты будут видны, как и ожидалось, и, кроме проблемы рисования, компоненты будут работать нормально. Вот самый маленький пример, который я мог получить, чтобы показать эту ошибку:
public class BugTest {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// The text field needs to be wrapped in a panel for the bug to show up.
JPanel messagePanel = new JPanel();
// A JLabel won't exhibit the bug, but a JTextField will.
JTextField textField = new JTextField("Some content");
messagePanel.add(textField);
// Loop so we can keep clicking OK until the bug shows up.
while (true) {
int res = JOptionPane.showOptionDialog(null, messagePanel,
"SomeTitle", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE, null, null, null);
}
}
});
}
}
Это известная ошибка в Swing? Есть ли стандартный обходной путь? Мне не удалось найти официальный отчет об ошибке для этого. Ошибка, по-видимому, отсутствует в Java 1.7, но мое приложение должно работать на более старой версии 1.5, и я хотел бы найти обходной путь, который работает на последней.
Связано: Безмодельный JDialog не отображает содержимое (не содержит пример кода, поэтому трудно понять, если это та же ошибка)
Конкретная версия Java, на которой обнаружена ошибка, - это 1.5.0_22.