Java: Запретить NPE в MetalFileChooserUI $ IndentIcon.getIconWidth? - PullRequest
3 голосов
/ 19 сентября 2008

в системах Windows. Я получаю следующий NPE с FileChooser. Это известная ошибка, которая еще не исправлена ​​солнцем. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342301

Кто-нибудь знает обходной путь для предотвращения этого исключения?

Спасибо. Андре

Исключение в потоке "AWT-EventQueue-2" java.lang.NullPointerException в javax.swing.plaf.metal.MetalFileChooserUI $ IndentIcon.getIconWidth (Неизвестно Источник) на javax.swing.SwingUtilities.layoutCompoundLabelImpl (Неизвестно Источник) на javax.swing.SwingUtilities.layoutCompoundLabel (Неизвестно Источник) на javax.swing.plaf.basic.BasicLabelUI.layoutCL (Неизвестно Источник) в javax.swing.plaf.basic.BasicLabelUI.getPreferredSize (неизвестный источник) в javax.swing.JComponent.getPreferredSize (Неизвестный источник) в javax.swing.plaf.basic.BasicListUI.updateLayoutState (Неизвестный источник) at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState (Неизвестно Источник) в javax.swing.plaf.basic.BasicListUI $ Handler.valueChanged (Неизвестно Источник) в javax.swing.DefaultListSelectionModel.fireValueChanged (неизвестный источник) at javax.swing.DefaultListSelectionModel.fireValueChanged (Неизвестно Источник) в javax.swing.DefaultListSelectionModel.fireValueChanged (неизвестный источник) в javax.swing.DefaultListSelectionModel.changeSelection (Неизвестно Источник) в javax.swing.DefaultListSelectionModel.changeSelection (неизвестный источник) в javax.swing.DefaultListSelectionModel.setSelectionInterval (Неизвестно Источник) в javax.swing.JList.setSelectedIndex (Неизвестный источник) в javax.swing.plaf.basic.BasicComboPopup.setListSelection (Неизвестно Источник) на javax.swing.plaf.basic.BasicComboPopup.access $ 300 (Неизвестно Источник) в javax.swing.plaf.basic.BasicComboPopup $ Handler.itemStateChanged (Неизвестно Источник) в javax.swing.JComboBox.fireItemStateChanged (Неизвестный источник) в javax.swing.JComboBox.selectedItemChanged (неизвестный источник) в javax.swing.JComboBox.contentsChanged (неизвестный источник)

Ответы [ 3 ]

1 голос
/ 19 сентября 2008

Итак, теперь с зарегистрированного аккаунта:)

Проблема с этими шагами в упомянутой ссылке заключается в том, что интерфейс и внешний вид настраиваются в нашей программе глобально. Таким образом, пользовательский интерфейс настроен до того, как я смогу манипулировать фильтрами файлов.

Редактировать: неправильно понял код для воспроизведения. Пример работает, как уже упоминалось. Спасибо.

1 голос
/ 19 сентября 2008

В сообщении об ошибке, на которое вы ссылались, также упоминается обходной путь. Кажется, все сводится к вызову методов в определенном порядке. Вы пробовали это?

ОПИСАНИЕ ЗАДАЧИ: Похоже, недокументированное плохое взаимодействие между точно установить пользовательский интерфейс и удалить все фильтры файлов, даже временно. Если последнее сделано до установки интерфейса, попробуйте отобразить диалоговое окно файла будет выдавать исключение, но не, если пользовательский интерфейс был установлен до возиться с фильтры. Возможно, можно сделать код более устойчивым к это или включить предупреждение в документы?

ШАГИ, КОТОРЫЕ СЛЕДУЮТ, ЧТОБЫ СДЕЛАТЬ ВОПРОС: Запустите прилагаемую программу: она не будет бомбить. Затем переместите setUI в нижней части конструктора и попробуйте еще раз: он будет.

0 голосов
/ 19 сентября 2008

Похоже, что описание обходного пути говорит, что вы должны попытаться установить пользовательский интерфейс перед манипулированием фильтрами. Это не работает?

Если это не сработает, возможно ли создать экземпляр ваших манипулируемых FileFilters в той же точке, в которой вы устанавливаете свой пользовательский интерфейс?

...