【问题标题】:Why is my Java program using elements of aqua LAF and the System LAF at the same time?为什么我的 Java 程序同时使用 aqua LAF 和 System LAF 的元素?
【发布时间】:2015-01-24 07:53:59
【问题描述】:

我有一个用 Java 制作的应用程序。当我使用跨平台 LAF(金属)从 Eclipse 运行它时 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

它显示 JButtons 和其他一些金属组件,JSpinners 使用 Aqua,而 JComboBoxes 使用 aqua 并且不能正常工作。他们实际上抛出:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.apple.laf.AquaMenuPainter.paintSelectedMenuItemBackground(AquaMenuPainter.java:153)
at com.apple.laf.AquaComboBoxRendererInternal.paintComponent(AquaComboBoxRenderer.java:151)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.CellRendererPane.paintComponent(CellRendererPane.java:151)
at javax.swing.plaf.basic.BasicListUI.paintCell(BasicListUI.java:227)
at javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:317)
at javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240)

该应用与 Aqua 配合得很好。当我使用 JWrapper 将其导出为本机 .app 并在另一台使用 Mavericks 而不是 Yosemite 的 Mac 上运行时,问题仍然存在。

我正试图让我的程序与它强制使用的任何 LAF(Aqua、金属或任何其他)一起工作,所以这有点问题。

此外,这似乎与 this 相同,但建议的解决方案不起作用。

【问题讨论】:

    标签: java macos look-and-feel


    【解决方案1】:

    好的,在我决定发布这个问题之前,我已经为这个问题纠结了一个多小时。几秒钟后,我想出了答案。

    private static JLabel... = new JLabel("example");
    private static JButton...= new JButton("example");
    //Things up here will display as aqua
    
    
    public static void main(String[] args){
    
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            JLabel... =new JLabel("example");
            //things down here will display as metal
    

    这是一个愚蠢的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-25
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多