java - 为了 Macify 一个 Java 应用程序,捕捉关于事件,我必须实现一个菜单吗?

标签 java macos about-box

The macify Notepad example是我能找到的“macification”的唯一例子,我想这一切都很好,很漂亮,除了菜单完全搞砸了我的布局。 我对 Java 非常非常陌生,所以我严格按照这些示例进行操作,但这个菜单确实必须取消。 有没有办法在没有菜单的情况下捕捉“关于”的东西?毕竟,Mac OS 上的这个东西即使没有也似乎存在。标准程序等 我没有 Mac 来测试代码,所以试错法非常有限...

这是怎么做到的?

最佳答案

有点死机,但它是我一直使用的代码。然而,它很复杂并且使用反射来避免在非 Mac 系统上抛出错误。

在您的应用程序初始化中或作为静态代码块:

if (System.getProperty("os.name").contains("Mac")) {
    try {
        Object app = Class.forName("com.apple.eawt.Application")
            .getMethod("getApplication")
            .invoke(null);

        Object al = Proxy.newProxyInstance(
            Class.forName("com.apple.eawt.AboutHandler").getClassLoader(),
            new Class[]{Class.forName("com.apple.eawt.AboutHandler")},
            new AboutListener()
        );

        app.getClass()
            .getMethod("setAboutHandler", Class.forName("com.apple.eawt.AboutHandler"))
            .invoke(app, al);
    }
    catch (Exception e) {
        //fail quietly
    }
}

在最后一个大括号之后的源文件底部

public class AboutListener implements InvocationHandler {

    public Object invoke(Object proxy, Method method, Object[] args) {
        //Show About Dialog
        return null;
    }
}

当发布一个完整的 java 应用程序时,像这样的小改动是不错的选择。这应该主要是可以复制和粘贴的,但您需要添加一两行来显示一个关于框。如果您确实需要进行非常糟糕的测试,请使用 Web-Start、Dropbox 公共(public)链接和附近的 Apple Store。

关于java - 为了 Macify 一个 Java 应用程序,捕捉关于事件,我必须实现一个菜单吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256230/

相关文章:

java - 来自 Android 子类的 textView 上的 setText()

java - 使用 getString(R.string.my_string) 搜索 map

java - 使用转义序列将字节 append 到java中的字符串

python - 在 MAC 上安装 Django 错误消息 "Command "python setup.py egg_info"failed with error code 1 in/private/tmp/pip-build-2yOWor/django/"

linux - Linux + windows + MAC下如何获取系统默认网关地址

Eclipse 3.7 靛蓝 : "About dialog" error

Java OS X Lion 关于菜单

c# - Java 与 C# 方法/函数返回类型重写?

macos - SVN 无法在全新的 Mac OSX 安装上运行

android - 如何通过单击按钮从大约返回到上一个 Activity ?