【发布时间】:2016-01-02 16:14:44
【问题描述】:
我有一个使用 maven 运行的 java 项目。我将JTattoo添加到maven依赖中,并在主类中将GUI管理器设置为HiFi团队:
try {
UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel");
} catch (InstantiationException ex) {
Logger.getLogger(MainClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(MainClass.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(MainClass.class.getName()).log(Level.SEVERE, null, ex);
}
当我运行我的应用程序时,Netbeans 没有显示任何错误,而且一切似乎都运行良好。但是当我运行我的应用程序时,我的大部分 JLabel 都没有显示,并且我得到一个 NullPointer 异常和以下堆栈跟踪(我的程序继续运行):
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:2043)
at java.awt.Component.getLocationOnScreen(Component.java:2028)
at com.jtattoo.plaf.JTattooUtilities.getRelLocation(JTattooUtilities.java:192)
at com.jtattoo.plaf.hifi.HiFiUtils.fillComponent(HiFiUtils.java:42)
at com.jtattoo.plaf.hifi.HiFiRadioButtonUI.paintBackground(HiFiRadioButtonUI.java:84)
at com.jtattoo.plaf.BaseRadioButtonUI.paint(BaseRadioButtonUI.java:97)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
任何人都有一个想法,什么会导致这个问题?如果这个问题无法解决,JTattoo HiFi/noir 主题是否有类似的免费替代品?
【问题讨论】:
-
外观和感觉 jar 在类路径中吗?您是否注意在 Swing 事件线程上设置外观和启动 GUI?
-
你是在 EDT 的上下文中初始化它吗?
-
对我来说很好,也许你应该考虑提供一个 runnable example 来证明你的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
-
感谢您的好评。我的程序很大,因为我建立了一个 SDK。我是初学者,所以不知道如何提供代码示例。从我的主我创建(在设置 GUI 管理器之后)一个 JFrame 和一个主菜单(扩展 JPanel),从这个主面板我可以在新框架上打开 1 个或多个新面板,之后主框架将关闭。标签在主菜单框架/面板上消失,当我从主菜单打开这些新框架/面板时,JTattoo 工作正常。这些新的框架/面板都是从新线程开始的。那么它确实与线程有关吗?
-
某种解决方法是仅在我启动新线程后应用它,而不是初始面板(主菜单)将具有默认外观,新打开的面板将具有 HiFi 外观和感觉。我可能已经找到了问题的原因。主菜单有一个私有构造函数(我使用单例模式来访问这个面板),尽管在我应用 HiFi 外观之前这个主菜单没有被初始化..
标签: java macos swing maven look-and-feel