java - Java 1.8 中无法正确显示 Swing 应用程序菜单名称

标签 java macos swing jmenubar

好吧,我以前做过 Swing 应用程序,我知道如果你想为应用程序菜单显示不同的名称(Mac 上通常有“首选项”和“退出”选项),你有使用:System.setProperty("com.apple.mrj.application.apple.menu.about.name", "App name"); 并且必须在创建 JFrame 之前执行。我已经这样做了,但它继续显示我的主类名称作为菜单名称,就好像我根本没有写那行代码一样。我用谷歌搜索了这个问题,但找不到任何有用的东西,然后我就在这里搜索,但遇到类似问题的每个人都在运行 Java 1.5、1.6 或 1.7。所以我想这可能与我当前的 Java 版本 1.8 有关。

This , this , 和 this不工作。 This , this , 和 this要么将我发送到过时的信息,要么链接不再有效。另外,我运行的是 Mac 10.8。

任何建议/答案将不胜感激。

更新:

这是我原来的代码:

package bouncing_off_axes;

/**
 * This is the driver class of this program.
 * 
 * @author Mason 
 *
 */

public class Main {

    /**
     * The driving method.
     * 
     * @param args
     */

    public static void main(String[] args) {

        System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Physics Engine Practice - Bouncing Balls");
        SimulationController view = new SimulationController("Test");

    }

}

这是 trashgod 提供给其他人的解决方案:

package bouncing_off_axes;

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JPanel;

    /** @see https://stackoverflow.com/questions/8955638 */
    public class NewMain {

        public static void main(String[] args) {
            System.setProperty("apple.laf.useScreenMenuBar", "true");
            System.setProperty(
                "com.apple.mrj.application.apple.menu.about.name", "Name");
            EventQueue.invokeLater(new Runnable() {

                @Override
                public void run() {

                    JFrame frame = new JFrame("Gabby");
                    final JPanel dm = new JPanel() {

                        @Override
                        public Dimension getPreferredSize() {
                            return new Dimension(320, 240);
                        }
                    };
                    dm.setBorder(BorderFactory.createLineBorder(Color.blue, 10));

                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(dm);
                    frame.pack();
                    frame.setLocationByPlatform(true);

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

显然我需要 10 个声望才能发布图片,所以我无法向您展示结果,但它没有成功。

最佳答案

在 Mac OS X 10.9 上使用 Java 8,设置 System 属性

System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name");

似乎无法更改应用程序菜单中显示的名称。仍然有效的替代方案包括:

  • 默认情况下,应用程序菜单将显示在 java 命令行中指定的类的简单名称或 JAR list 的 Main-Class 属性.

     java -cp build/classes mypackage.Name
     java -jar dist/MyJar.jar
    
  • 使用 -Xdock:name="Name" 命令行参数。

    java -Xdock:name="Name" -cp build/classes mypackage.Main
    java -Xdock:name="Name" -jar MyJar.jar
    
  • 将应用程序 JAR 添加到 Mac 应用程序包中,如图所示 here ,将属性添加到 Info.plist

    <key>JVMOptions</key>
    <string>-Xdock:name=Name</string>
    

关于java - Java 1.8 中无法正确显示 Swing 应用程序菜单名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26069315/

相关文章:

objective-c - 如何创建一个使用固定图像且没有箭头的 NSPopUpButton?

Java 货币转换器 GUI

Java 2d drawString不规则字母间距

java - 推送通知条件

java - java如何处理不适合2个字节的字符

javax.net.ssl.SSLHandshakeException : Remote host closed connection during handshake Support

java - 如何设置 JRViewer 导出选项?

java - Testng 中带有数组 arraylist 的数据提供者

java - 选项卡布局的选项卡不显示任何内容

javascript - jQuery 不能在 Chrome 中运行,但可以在 Firefox 中运行