| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > NPE at java.awt.Window.pack() |
| Автор: coolin 26.3.2007, 07:27 |
| java.lang.NullPointerException at java.awt.Dimension.<init>(Dimension.java:91) at java.awt.Component.getMaximumSize(Component.java:2343) at java.awt.Container.getMaximumSize(Container.java:1627) at javax.swing.JComponent.getMaximumSize(JComponent.java:1652) at javax.swing.BoxLayout.checkRequests(BoxLayout.java:435) at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:251) at javax.swing.JToolBar$DefaultToolBarLayout.preferredLayoutSize(JToolBar.java:769) at java.awt.Container.preferredSize(Container.java:1558) at java.awt.Container.getPreferredSize(Container.java:1543) at javax.swing.JComponent.getPreferredSize(JComponent.java:1617) at java.awt.BorderLayout.layoutContainer(BorderLayout.java:798) at java.awt.Container.layout(Container.java:1401) at java.awt.Container.doLayout(Container.java:1390) at java.awt.Container.validateTree(Container.java:1473) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validateTree(Container.java:1480) at java.awt.Container.validate(Container.java:1448) at java.awt.Window.pack(Window.java:495) JFrame.pack(); иногда падает при паковке фрейма. Иногда при установке размеров. Зависимостей не нашел, похоже валиться от случая. используеться jre 1.5.0_08 |
| Автор: powerOn 26.3.2007, 08:17 |
| На других версиях JDK пробовал выполнять? Код можешь показать? Поскольку так совершенно непонятно что могло послужить причиной. |
| Автор: coolin 26.3.2007, 08:44 |
| Проблема появилась с переходом с 1.4.0 на 1.5.0 код показать не могу, так как кода много. На фрейме несколько вкладок, на вкладках много элементов, используються все лэйауты. Построение всех компонентов происходит в нескольких десятков классов. В инете есть несколько багов похожих на мой http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337517 http://jalbum.net/forum/thread.jspa?threadID=1475&tstart=0&messageID=100158 http://line6.com/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=22&t=001076 но связи какими-то темами или еще с чем не нахожу... |
| Автор: coolin 26.3.2007, 09:10 |
| складываеться впечатление что при построении лэйаута используеться не совершенный алгоритм, который время от времени сыпиться. |
| Автор: powerOn 26.3.2007, 09:14 |
| Так трудно сказать в чем причина: в твоем ли коде ошибка или в JDK. Если можешь, то напиши небольшой пример, где это поведение имеет место, иначе, не видя кода, ничего сказать не получится. |
| Автор: coolin 26.3.2007, 09:39 |
| Я допускаю что где-то неправильно сформирован лэйаут, но при этом должно быть соответсвуещее предупреждение (от JDK). powerOn, наверное ты прав, нужно это воспроизвести на простом примере, может и решиться сразу. |
| Автор: w1nd 28.3.2007, 00:16 |
| Причины этой и множества подобных ошибок в одом: вызов не из EDT. Уже чуть не на каждом заборе написано, что все свинговые компоненты рассчитаны на работу только в EDT и никак не защищены от конкурентных вызовов. Запомните: любые методы свинг-компонент можно вызывать только из EDT. EDT - event dispatch thread |
| Автор: LSD 28.3.2007, 11:43 | ||
repaint() и revalidate() можно вызывать из любого потока. |
| Автор: coolin 3.4.2007, 11:44 |
| да нужно быть внимательнее со свингом. в тулбар засовывалиь кнопки и в процессе построения лэйаута им задавались размеры, перебирая все компоненты тулбара. раз в 10 раз сам размер еще не был установлен, но флаг о его установке уже был *) - конкуренция потоков. Присваил все размеры сразу - все ок. всем пасиба |
| Автор: LSD 3.4.2007, 12:03 |
| Не забывай помечать вопрос как решенный. |