如果我使用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
(忍者編輯的錯別字)