Внешний вид Java и Windows

Я сделал свинг-приложение, которое сканирует изображения; и каждое изображение, представленное листом, я дерево

проблема, с которой я столкнулся, заключается в том, что она выдает это исключение

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.sun.java.swing.plaf.windows.XPStyle$Skin.getWidth(XPStyle.java:513)
    at com.sun.java.swing.plaf.windows.XPStyle$Skin.getWidth(XPStyle.java:517)
    at com.sun.java.swing.plaf.windows.WindowsTreeUI$ExpandedIcon.getIconWidth(WindowsTreeUI.java:138)
    at javax.swing.plaf.basic.BasicTreeUI.drawCentered(BasicTreeUI.java:1580)
    at javax.swing.plaf.basic.BasicTreeUI.paintExpandControl(BasicTreeUI.java:1464)
    at javax.swing.plaf.basic.BasicTreeUI.paint(BasicTreeUI.java:1206)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
    at javax.swing.JComponent.paintComponent(JComponent.java:763)
    at javax.swing.JComponent.paint(JComponent.java:1027)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

и я не знаю, почему это появляется. Примечание. Я использую внешний вид Windows.

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

и java 1.6_22 под windows-7


person ehab refaat    schedule 01.03.2011    source источник
comment
Можете ли вы опубликовать свой код, пожалуйста? Без кода сложно сказать, что происходит.   -  person Vivin Paliath    schedule 01.03.2011
comment
можешь выложить исходный код?   -  person Lenin Raj Rajasekaran    schedule 01.03.2011
comment
Не думаю, что проблема в самой библиотеке. Не могли бы вы поделиться тем, как вы сканируете изображения в каталоге. Я чувствую проблему с вводом. (список изображений в директории)   -  person uncaught_exceptions    schedule 01.03.2011
comment
На самом деле, я вполне мог поверить, что это проблема с Windows PL&F. Минимальный пример кода, который вызывает проблему, был бы хорош. Возможно, это довольно специфично для машины.   -  person Tom Hawtin - tackline    schedule 01.03.2011
comment
UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); // Плохо, Плохо, Плохо UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // хорошо, хорошо, хорошо — ваша версия не будет работать ни на чем, кроме Windows, не то чтобы пользователи Mac и Unix хотели видеть Windows PLAF на своем рабочем столе в любой случай. Что касается предложения «почтовый индекс» - я «против». Вместо этого опубликуйте SSCCE (pscode.org/sscce.html). Кроме того, мой WAG заключается в том, что код делает что-то вне EDT, что должно быть сделано в EDT.   -  person Andrew Thompson    schedule 01.03.2011
comment
Просто используйте SWT... реализация Swing в Windows 7 в любом случае отстой.   -  person Daniel    schedule 01.03.2011
comment
Вы установили внешний вид до или после того, как рамка компонента стала видимой? Я смутно помню, как получал этот нулевой указатель при изменении внешнего вида на WindowsLookAndFeel, если кадр уже был виден.   -  person Beothorn    schedule 01.03.2011
comment
@Lucass PLAF можно изменить, когда JFrame (или JApplet) уже виден. Просто необходимо вызвать SwingUtilities.updateComponentTreeUI(Component), чтобы обеспечить корректировку дерева компонентов.   -  person Andrew Thompson    schedule 02.03.2011
comment
Сначала я использовал UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(), но проблема все еще не найдена. А также это первая строка в моем методе main()   -  person ehab refaat    schedule 05.03.2011


Ответы (1)


Попробуй это:

//Set the look and feel to users OS LaF.
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
person Afra    schedule 15.03.2011
comment
// Установить внешний вид для windows. Нет, это не так. По крайней мере, не на Mac. или ОС *nix. - person Andrew Thompson; 15.03.2011
comment
Боже мой, я люблю это. На окнах это выглядит УДИВИТЕЛЬНО. - person Nicholas DiPiazza; 14.11.2012
comment
Пожалуйста, проголосуйте за ответ, если он вам помог. - person Afra; 15.11.2012
comment
Почему не catch (Exception e)? - person wchargin; 05.06.2013
comment
WChargin: блоки try-catch, вероятно, были сгенерированы IDE индивидуально (затмение ведет себя так). - person Buffalo; 30.05.2014