java - 添加 Swing 菜单栏时出现一堆错误

标签 java macos swing netbeans

我正在使用 NetBeans 创建 Java 应用程序,因此我利用了 GUI 生成器,但每当我尝试添加 Swing 菜单栏时,都会遇到大量错误。你能帮我解决这个问题吗?

在 GUI 构建器中的“Swing Menus”菜单下,我将“菜单栏”拖到 JFrame 的顶部(我有足够的空间容纳它和所有内容),它在 GUI 构建器中看起来很好(查看下面的链接)用于屏幕截图)。

GUI Builder 菜单栏选择 enter image description here

添加菜单栏之前 GUI 构建器中的 JFrame enter image description here

添加菜单栏后 GUI 构建器中的 JFrame enter image description here

添加菜单栏后运行应用程序后的 JFrame enter image description here

运行应用程序后添加菜单栏之前的 JFrame enter image description here

这些是我运行带有菜单栏的应用程序时遇到的所有错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.desktop/com.apple.laf.AquaMenuPainter.paintMenuBarBackground(AquaMenuPainter.java:149)
    at java.desktop/com.apple.laf.AquaMenuBarUI.paint(AquaMenuBarUI.java:82)
    at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
    at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:590)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5262)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
    at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
    at java.desktop/java.awt.Container.paint(Container.java:2002)
    at java.desktop/java.awt.Window.paint(Window.java:3926)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

有人知道为什么会发生这种情况吗?

最佳答案

我用谷歌搜索了一下,发现(基于异常(exception))它是由外观和感觉引起的。不知道为什么它只在添加菜单栏时失败...

请尝试将主方法中的外观设置为如下所示的其他内容。对我来说,netbeans 总是生成使用 nimbus l&f 的 main 方法。

public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception e) {
            e.printStackTrace();
        }

        ...//all other stuff which was there earlier...e.g. java.awt.EventQueue.invokeLater(new Runnable()...

    }

或者您可以尝试代替 Nimbus:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

关于java - 添加 Swing 菜单栏时出现一堆错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780067/

相关文章:

java - 当面板透明时防止面板下方的组件悬停

java - JPanel 中的 JTabbedPane?

bash - ffmpeg - 无效的持续时间

java - JTable 中行选择的受控编辑

java - 在android注销后防止后退按钮

java - kendo taglib jar 的 Maven 依赖项

xcode - 如何跨一个 Xcode 工作区的多个目标共享 Swift 类?

objective-c - 无法访问应用程序委托(delegate)属性

java - 如何使用 Spring Data Redis Repositories 构建动态查询?

java - 我可以在每次循环重复时更改字符串的名称吗?