【问题标题】:apple.eawt.Application creates a false menu?apple.eawt.Application 创建了一个虚假菜单?
【发布时间】:2012-09-30 10:03:37
【问题描述】:

如果我使用com.apple.eawt.Application; 至少像这样实例化它:

               Application app = Application.getApplication ()

默认的 Mac 应用程序菜单行为不端。

下面的最小可运行测试代码显示,当它启动时,一个“Hello World”外壳和只有默认的应用程序菜单,按预期标记为“SWT”。

如果没有应用程序,选择“退出”(或按 Command-Q 键)会正常退出程序。

对于应用程序,选择“退出”(或按 Command-Q 键)似乎会正常退出程序(例如 shell 消失),但标有“SWT”的菜单仍然可见。它不设防,也不可选择。根据IDE(Idea),我的测试程序还在运行,必须通过IDE终止。

在我的环境中,使用下面的测试代码可以 100% 重现。

import com.apple.eawt.Application;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class AboutTester
{

    public static void main ( String[] args )
        {
            Display display = new Display ();
            Shell shell = new Shell ( display );
            shell.setSize ( 300, 200 );
            shell.setLayout ( new FillLayout () );



                            // Comment out the following line - problem goes away.
                Application app = Application.getApplication ();



            Label label = new Label ( shell, SWT.BORDER_SOLID );
            label.setText ( "Hello World" );
            shell.open ();
            while ( !shell.isDisposed () )
                {
                    if ( !display.readAndDispatch () )
                        display.sleep ();
                }
            display.dispose ();
        }
}

当然,在 Mac 上无法访问 com.apple.eawt.Application; 是一个很大的障碍。

有人知道这个问题的解决方法吗?

完全披露:我认为可能发生的事情(从其他观察)是应用程序正在生成一个菜单,然后 SWT 用 SWT 生成的菜单覆盖该菜单。附加 AboutHandler() 附加到应用程序生成的菜单 - 因此在使用最顶层的 SWT 生成的菜单时似乎不起作用。当 SWT 菜单退出时,它将应用程序生成的菜单作为孤儿留下。我的测试应用程序不知道如何清理这个应用程序生成的菜单,因此挂起。但这是猜测。

Mac OS X 10.6.8 (10K549)
org.eclipse.swt.cocoa.macosx.x86_64_3.7.0.v3735b.jar
org.eclipse.swt_3.7.1.v3738a.jar

(忍者编辑错别字)

【问题讨论】:

    标签: java macos swt finder


    【解决方案1】:

    我看到完全相同的问题,我认为这可能是线程问题。如果您想在 mac 上使用自定义菜单,请考虑使用此文件来处理来自 Eclipse SWT 方面的内容https://github.com/ajdaniel/tvrenamer/blob/devel/src/main/com/google/code/tvrenamer/view/CocoaUIEnhancer.java

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2015-12-25
      • 2013-06-28
      • 2019-04-21
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多