Да, вам определенно понадобится -XstartOnFirstThread
, чтобы это работало в Mac OS X. Поскольку это параметр виртуальной машины, вы можете указать его только при запуске приложения, поэтому обнаружение ОС по вашему коду и установка его, если это Mac OS X не возможна. Решение на сайте Eclipse создает правильный Mac OS X My Application.app , который зависит от платформы и, опять же, не применим в вашем случае.
Однако я только что попытался запустить приложение Eclipse RCP в Windows XP с указанным аргументом -XstartOnFirstThread
, и оно не жаловалось вообще. Это означает, что вы можете указать этот аргумент в своем файле JNLP, и, вероятно, он будет проигнорирован на всех других платформах и получен на Mac OS X.
ОБНОВЛЕНИЕ: Если по какой-то причине -XstartOnFirstThread
вызывает проблемы на какой-либо платформе или вы просто хотите Делать правильные вещи , существует другое возможное решение. Вы можете обнаружить ОС пользователя в браузере - при условии, что приложение запускается с веб-страницы - и предоставить другую JNLP для Mac OS X и других платформ.
ОБНОВЛЕНИЕ 2: Как указано в комментариях, существует руководство по развертыванию приложений SWT с Java Web Start . Я просто запустил JNLP на Mac OS X (10.6.x), и это сработало. Глядя на пример 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>
В конце файла: специфический аргумент -XstartOnFirstThread
для Mac OS X.