【问题标题】:Java OS X Lion Set application name doesn't workJava OS X Lion Set 应用程序名称不起作用
【发布时间】:2012-01-18 23:04:37
【问题描述】:

我正在尝试更改显示在 OS X 菜单栏中的应用程序名称,但我无法成功。我已经尝试使用以下代码将设置作为主要方法中的第一条语句:

System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Alessio");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

但它不起作用,在菜单栏中显示main:

我使用的是 Mac OS X Lion (10.7.2)。

有没有办法在菜单栏中更改应用程序名称?如果有,怎么做?

【问题讨论】:

标签: java macos swing


【解决方案1】:

使用JDK8,可以设置apple.awt.application.name属性影响Application菜单名。

但是,Martijn Courteaux 的警告仍然适用:您必须在加载任何 AWT 类之前执行此操作。如果 AWT 类位于 JFrame 的子类中,那么 AWT 类将在您的 main() 方法运行之前加载。

参考:

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/5c1d06cd7d7b/src/macosx/native/sun/osxapp/NSApplicationAWT.m#l157

【讨论】:

  • 为我工作,MacOSX 10.10 Yosemite,Oracle JDK 8
  • 为我工作 MacOS 10.13 High Sierra
【解决方案2】:

尝试将System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Alessio"); 放在您的main 代码上

【讨论】:

    【解决方案3】:

    我不确定这是否也适用于 OS X Lion,但我在 Mountain Lion 上。

    经过一些测试,我的结论是,当且仅当你不做任何事情时,你才能使用旧方法

    • java.awt.Toolkit
    • 设置外观

    设置应用名称之前。

    使用 Toolkit 的一些东西是:(随时编辑此答案并添加项目)

    • 加载java.awt.Font(@see 字体的静态初始化程序)
    • 获取屏幕分辨率。
    • 加载扩展 JFrame 的类(例如,如果该类包含您的 main 方法)

    【讨论】:

    • 我将相关的 System.setProperty() 调用从我的 JFrame 类移到了我的主类中,它开始工作——不涉及命令行标志。谢谢。
    • 起初我只是将System.setProperty(...) 移动到main 方法的一个自己的类中,这不起作用,因为我之前有一个UIManager.setLookAndFeel(...) 调用。现在,通过在System.setProperty(...) 调用之后进行此调用,它可以完美运行:)
    【解决方案4】:

    显然,当您将以下选项添加到命令行时,您可以添加以下内容:

    -Xdock:name="Alessio"

    虽然 com.apple.mrj.application.apple.menu.about.name 是正确的属性名称,但我认为您设置它为时已晚。您是否在命令行上尝试过:

    -Dcom.apple.mrj.application.apple.menu.about.name=Alessio

    有关为 OS X 编写 Java 应用程序的更多信息:http://www.oracle.com/technetwork/articles/javase/javatomac-140486.html

    可能还值得看看这样的东西: http://launch4j.sourceforge.net/

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题并发现了这一点:如果您的 main 方法是您的一个 GUI 类的成员(例如,一个从 JFrame 派生的),那么当 JVM 加载您的类时,它还需要加载一些其他 AWT 类。这些可以与静态初始化程序中的 java.awt.Toolkit 交互,正如 Martijn 所观察到的,这会导致在您的 main 方法有机会设置它之前检查该属性。

      尝试将 main 方法移到不扩展任何 Swing 或 AWT 类的单独类中,看看它是否有效。

      【讨论】:

      • OS X 10.1.1 with java 1.8.0_23-b17: 不会工作,即使main() 被单独放在一个小类中并在一开始就调用System.setProperty()。跨度>
      • 如果您设置apple.awt.application.name 属性,它确实有效。刚刚在 OS X 11.0.1 上测试
      【解决方案6】:

      创建只有 main 方法的类允许您更改应用程序名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-09
        相关资源
        最近更新 更多