Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8188085

No more screen menu bar in .app bundles under macOS High Sierra 10.13 with apple.laf.useScreenMenuBar set to true

    Details

      Description

      FULL PRODUCT VERSION :
      java version "1.8.0_144"
      Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
      Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)


      ADDITIONAL OS VERSION INFORMATION :
      Darwin 17.0.0 Darwin Kernel Version 17.0.0: Thu Aug 24 22:01:05 PDT 2017; root:xnu-4570.1.46~3/RELEASE_X86_64 x86_64
      macOS High Sierra 10.13 GM build 17A362a

      A DESCRIPTION OF THE PROBLEM :
      When the System property "apple.laf.useScreenMenuBar" is set to "true", the JMenuBar instance set on the displayed frame should appear in the macOS screen menu bar. This is not the case under macOS High Sierra 10.13 GM anymore when the application is run from an .app bundle.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      In a temporary folder, create a JMenuBarTest.java file containing the source code provided in this report.

      Under macOS, install JDK 8u144, open a Terminal Window, change directory to the folder where JMenuBarTest.java is stored and run the 3 following commands to generate a JMenuBarTest.app bundled application:

      javac JMenuBarTest.java

      /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javapackager -createjar -appclass JMenuBarTest -srcdir . -outdir . -outfile JMenuBarTest.jar

      /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/javapackager -deploy -outdir . -outfile JMenuBarTest -srcdir . -srcfiles JMenuBarTest.jar -appclass JMenuBarTest -name "JMenuBarTest" -native image


      Double-click on the JMenuBarTest.app test program under macOS 10.13.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      I expected that the "File" menu with its item "Hello" would appear beside "JMenuBarTest" menu in macOS screen menu bar.
      ACTUAL -
      The macOS screen menu bar displays only an empty "JMenuBarTest" menu.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.event.ActionEvent;
      import javax.swing.*;

      public class JMenuBarTest {
        public static void main(String [] args) {
          System.setProperty("apple.laf.useScreenMenuBar", "true");
          
          final JFrame frame = new JFrame();
          JMenuItem menuItem = new JMenuItem(new AbstractAction("Hello") {
              public void actionPerformed(ActionEvent ev) {
                JOptionPane.showMessageDialog(frame, "Hello");
              }
            });

          JMenuBar menuBar = new JMenuBar();
          frame.setJMenuBar(menuBar);
          JMenu fileMenu = new JMenu("File");
          menuBar.add(fileMenu);
          fileMenu.add(menuItem);
          frame.setVisible(true);
        }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Two worakarounds:
      - Run the application from its Jar executable file, but macOS users are not used to run applications with a Jar executable file, and this requires to install a JRE. This kind of executable file isn't accepted in the Mac App Store too.
      - Do not set the "apple.laf.useScreenMenuBar" System property to "true", or set it to "false" to keep the menu bar at the top of the frame, but macOS users don't expect this experience from applications under macOS.

      Replacing JMenuBar, JMenu and JMenuItem classes by MenuBar, Menu and MenuItem classes didn't work better.

      1. JMenuBarTest.java
        0.7 kB
        Pardeep Sharma
      2. menubar_bug.mov
        12.44 MB
        Hendrik Schreiber
      1. AppResult-8u144.PNG
        89 kB

        Activity

        Hide
        hschreiber Hendrik Schreiber added a comment -
        Since Apple just pushed the second beta for 10.13.1—perhaps it's worth checking whether they have fixed this issue already.
        Show
        hschreiber Hendrik Schreiber added a comment - Since Apple just pushed the second beta for 10.13.1—perhaps it's worth checking whether they have fixed this issue already.
        Hide
        serb Sergey Bylokhov added a comment -
        10.13.1 does not solve the problem.
        Show
        serb Sergey Bylokhov added a comment - 10.13.1 does not solve the problem.
        Hide
        hschreiber Hendrik Schreiber added a comment -
        > 10.13.1 does not solve the problem.

        Too bad. That would have been very convenient.
        Is there a way to add the potentially missing nib files to the JavaVM.framework and try that as solution?

        See http://mail.openjdk.java.net/pipermail/awt-dev/2017-October/013193.html for details.
        Show
        hschreiber Hendrik Schreiber added a comment - > 10.13.1 does not solve the problem. Too bad. That would have been very convenient. Is there a way to add the potentially missing nib files to the JavaVM.framework and try that as solution? See http://mail.openjdk.java.net/pipermail/awt-dev/2017-October/013193.html for details.
        Hide
        serb Sergey Bylokhov added a comment -
        I got a confirmation from Apple that this is a known issue, and the fix is in progress.
        Show
        serb Sergey Bylokhov added a comment - I got a confirmation from Apple that this is a known issue, and the fix is in progress.
        Hide
        hschreiber Hendrik Schreiber added a comment -
        Good. Did they mention the target release? I.e. 10.13.1 or will we have to wait for longer?
        Show
        hschreiber Hendrik Schreiber added a comment - Good. Did they mention the target release? I.e. 10.13.1 or will we have to wait for longer?

          People

          • Assignee:
            serb Sergey Bylokhov
            Reporter:
            webbuggrp Webbug Group
          • Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: