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 外观的主要内容,如果未能解决你的问题,请参考以下文章
CMDIChildWnd在Windows-10上的外观和感觉
如何让Java Swing Application在windows和linux中字体一致?