是的,您绝对需要-XstartOnFirstThread
在Mac OSX上使它正常工作。由于它是VM参数,因此只能在启动应用程序时指定它,因此如果无法使用Mac OS X,则从代码中检测并设置OS。在Eclipse的现场解决方案创建了一个合适的MacOS X 我Application.app ,这是特定于平台的,并再次,不要在你的情况下是可行的。
但是,我只是尝试使用-XstartOnFirstThread
指定的参数在Windows XP上运行Eclipse RCP应用程序,而它一点也不抱怨。这意味着您可以在JNLP文件中指定此参数,并且大概在所有其他平台上都将忽略该参数,并在Mac OS X上将其提取。
如果由于某种原因-XstartOnFirstThread
在任何平台上引起麻烦,或者您只想 做正确的事 ,那么还有另一种可能的解决方案。您可以在浏览器中检测到用户的OS(假设该应用程序是从网页启动的),然后为Mac OS X和其他平台提供不同的JNLP。
如评论中所指出,有一个有关使用Java Web Start部署SWT应用程序的教程。我只是在Mac OS X(10.6.x)上启动了JNLP,并且可以正常工作。查看示例JNPL,我发现了以下内容:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="http://www.eclipse.org/swt/jws/"
href="controlexample.jnlp">
<information>
<title>Control Example</title>
<vendor>eclipse.org</vendor>
<homepage href="http://www.eclipse.org/swt/jws/" />
<description>A demonstration of SWT Widgets</description>
<description>Control Example</description>
</information>
<security>
<all-permissions />
</security>
<resources>
<extension href="swt.jnlp"/>
<jar href="controlexample.jar" />
</resources>
<application-desc main-class="org.eclipse.swt.examples.controlexample.ControlExample" />
</jnlp>
请注意最后<extension href="swt.jnlp"/>
一行,指向特定于平台的SWT JNLP文件(此处省略了某些部分):
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="http://www.eclipse.org/swt/jws/"
href="swt.jnlp">
<information>
<title>SWT</title>
<vendor>eclipse.org</vendor>
<homepage href="http://www.eclipse.org/swt/jws/" />
<description>SWT</description>
</information>
<security>
<all-permissions />
</security>
<resources os="Windows" arch="x86">
<j2se version="1.4+" />
<jar href="swt-win32-windows-x86.jar" />
</resources>
...
<resources os="Mac\ OS\ X">
<j2se version="1.5*" java-vm-args="-XstartOnFirstThread"/>
<jar href="swt-carbon-osx-universal.jar" />
</resources>
<component-desc/>
</jnlp>
到文件末尾的位置:Mac OS X特定-XstartOnFirstThread
参数。