Java 和 Windows 外观

Posted

技术标签:

【中文标题】Java 和 Windows 外观【英文标题】:Java and Windows Look & feel 【发布时间】:2011-07-06 16:27:37 【问题描述】:

我做了一个扫描图像的摇摆应用程序;每个图像由一片叶子代表一棵树

我遇到的问题是它抛出了这个异常

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下

【问题讨论】:

你能发布你的代码吗?没有代码很难判断发生了什么。 我认为问题不在于库本身。您介意分享您如何扫描目录中的图像吗?我感觉输入有问题。 (目录中的图像列表) 实际上,我完全可以相信这是 Windows PL&F 的问题。触发问题的代码的最小示例会很好。可能它是特定于机器的。 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 做一些事情,应该在 EDT 上做 @Lucass PLAF 可以在 JFrame(或 JApplet)已经可见时更改。只需调用 SwingUtilities.updateComponentTreeUI(Component) 以确保调整组件树。 【参考方案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();
    

【讨论】:

""//设置windows的外观。"不,它不会那样做。至少,不是在 Mac 上。或 *nix 操作系统。 天哪,我喜欢它。在 Windows 上,这看起来很棒。 如果对您有帮助,请考虑投票。 为什么不catch (Exception e) WChargin:try catch 块可能是由 IDE 单独生成的(eclipse 的行为是这样的)。

以上是关于Java 和 Windows 外观的主要内容,如果未能解决你的问题,请参考以下文章

windows颜色和外观

CMDIChildWnd在Windows-10上的外观和感觉

如何让Java Swing Application在windows和linux中字体一致?

为 Windows 11 更新 Application.Messagebox 的外观

具有 Windows 7 外观的消息框

[外观] Firemonkey Windows Hint 气球样式