0

com.apple.eawt.Application;このようにインスタンス化するのに最小限でも使用する場合:

               Application app = Application.getApplication ()

デフォルトのMacアプリケーションメニューは誤動作します。

以下の実行可能な最小限のテストコードは、起動時に「Hello World」シェルと、期待どおりに「SWT」というラベルの付いたデフォルトのアプリケーションメニューのみを示しています。

アプリケーションがない場合、「終了」を選択する(またはCommand-Qキーを押す)と、プログラムは通常どおり終了します。

アプリケーションでは、「終了」を選択する(またはCommand-Qキーを押す)と、プログラムは正常に終了するように見えます(たとえば、シェルが消えます)が、「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 ();
        }
}

もちろん、にアクセスできないことcom.apple.eawt.Application;はMacにとって大きな障害です。

誰かがこの問題の解決策を知っていますか?

完全な開示:(他の観察から)起こっていると思うのは、アプリケーションがメニューを生成していて、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

(タイプミスの忍者編集)

4

1 に答える 1

0

まったく同じ問題が発生します。スレッドの問題である可能性があります。Macでカスタムメニューを使用したい場合は、EclipseSWT側からそのようなものを処理するこのファイルの使用を検討してくださいhttps://github.com/ajdaniel/tvrenamer/blob/devel/src/main/com/google/code /tvrenamer/view/CocoaUIEnhancer.java

于 2012-10-20T22:16:09.793 に答える