【问题标题】:Java UI Manager look and feel (JTattoo) causes NULLpointerJava UIManager 外观 (JTattoo) 导致 NULL 指针
【发布时间】: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


【解决方案1】:

(a) 检查你的 Java,有已知的 bug https://bugs.openjdk.java.net/browse/JDK-8043705

(b) 检查你的库:使用 jtattoo l'n'f 创建新的 hello world-like 应用程序 - 只是一个 JFrame + JLabel

(c) 尝试找出 hello world 应用程序与您的实际应用程序之间的区别。

【讨论】:

    【解决方案2】:

    1-导入JTattoo 1.6.13 2- 替换 main 中的代码

    public static void main(String args[]) {

          com.jtattoo.plaf.acryl.AcrylLookAndFeel.setTheme("Green", "INSERT YOUR LICENSE KEY HERE", "Company");
         try { 
        UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel"); 
    } catch(Exception ignored){
             System.out.println(ignored);}
         
         
         
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewjFrame().setVisible(true);
            
               
                 
                   
            }
        });
    }
    

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多