Java 如何使我的e4 swt应用程序图标在Mac dock中反弹

Java 如何使我的e4 swt应用程序图标在Mac dock中反弹,java,macos,swt,e4,Java,Macos,Swt,E4,我正在尝试按照中的建议制作mac托盘图标 这适用于纯java应用程序和Swing 但这不适用于e4 swt应用程序,如何使其在这种类型的应用程序中反弹 参考: 下面链接中的示例代码的pfa 应用程序。requestUserAttention适用于我的e4应用程序(Mac10.9.3上的Eclipse4.3.2和Java1.8更新5) 注意:只有当应用程序不是焦点应用程序时,它才会执行某些操作。使用false参数,只有一次反弹,指定true使其反弹,直到应用程序具有焦点 更新: 您还可以使用SWT

我正在尝试按照中的建议制作mac托盘图标

这适用于纯java应用程序和Swing

但这不适用于e4 swt应用程序,如何使其在这种类型的应用程序中反弹

参考: 下面链接中的示例代码的pfa

应用程序。requestUserAttention
适用于我的e4应用程序(Mac10.9.3上的Eclipse4.3.2和Java1.8更新5)

注意:只有当应用程序不是焦点应用程序时,它才会执行某些操作。使用
false
参数,只有一次反弹,指定
true
使其反弹,直到应用程序具有焦点

更新:

您还可以使用SWT Mac特定的类来完成此操作,如下所示:

private static final long sel_requestUserAttention_ = OS.sel_registerName("requestUserAttention:");

private static final int NSCriticalRequest = 0;
private static final int NSInformationalRequest = 10;

...

NSApplication app = NSApplication.sharedApplication();

OS.objc_msgSend(app.id, sel_requestUserAttention_, NSInformationalRequest);
使用
NSInformationalRequest
进行一次跳转,然后使用
NSCriticalRequest
跳转,直到应用程序收到焦点

由于这是仅限Mac的SWT代码,您必须将其放入带有
MANIFEST.MF中平台过滤器的插件或片段中,例如:

Eclipse-PlatformFilter: (& (osgi.ws=cocoa) (osgi.os=macosx) (osgi.arch=x86_64) )
更新:

以上代码适用于MacOSX上的64位SWT,用于32位SWT

private static final int sel_requestUserAttention_ = OS.sel_registerName("requestUserAttention:");

对于e4应用程序Application.requestUserAttention中的我来说,我已经创建了一个测试代码,您能看一下这个示例吗。我得到以下错误2014-06-18 13:01:25.048 java[678:d07]-[SWTApplication(null选择器)]:发送到实例0x175f40 2014-06-18 13:01:25.049 java[678:d07]的未识别选择器***NSForwarding:警告:消息“”的选择器(0x0)与目标C运行时(0x18ec5e0)已知的选择器不匹配--中止您使用的Mac OSX版本是什么?平台->Mac:os x 10.9.02 swt:v 3.102.1 java:1.6(默认苹果版本)公共类TestClass{受保护的Shell;公共静态void main(字符串[]参数){尝试{TestClass window=new TestClass();window.open();}catch(异常e){e.printStackTrace();}}}public void open(){Display Display=Display.getDefault();createContents();shell.open();shell.layout();Display.getDefault().asyncExec(新Runnable(){@Override public void run()){com.apple.eawt.Application Application=Application.getApplication();Application.requestUserAttention(true);};}受保护的void createContents(){shell=new shell();shell.setSize(450300);}这不起作用