2012-09-30 82 views
0

如果我使用com.apple.eawt.Application;甚至最小的實例是這樣的: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(); 
     } 
} 

當然,沒有訪問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

(忍者編輯的錯別字)

回答