Почему приложение webstart не может быть запущено на Mac?(отсутствует vmarg) - PullRequest
0 голосов
/ 28 июля 2011

Hy там,

Я разработал приложение, которое должно запускаться через javaws, само приложение протестировано для работы на Linux (Ubuntu 10.04 LTS), Windows 7 и Mac OS.Он использует SWT и работает на всех этих платформах без проблем, если он запускается локально.

после некоторых трудностей приложение теперь хорошо запускается на машинах Linux и Windows со всеми архитектурами, если бы не Mac!

Я знаю, что для запуска приложения swt под macOS нужно указать java-vm XstartOnFirstThread, а для javaws файлу jnlp нужен следующий тег ресурса:

<resources os="Mac">
    <j2se version="1.5+" javaws-vm-args="-XstartOnFirstThread" />
    <nativelib href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
    <jar href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
  </resources>

как обсуждено в этом вопросе У macOS могут быть проблемы с SWT и определением j2se="xy", поэтому я попробовал его с конкретным, ни с одним (даже с глобальным) и с "общим" (Например: j2se="1.5+").

Я подозреваю, что аргумент javaws-vm-args="-XstartOnFirstThread" или java-vm-args="-XstartOnFirstThread" (нашел этот аргумент с и без части "ws" в интернете и попробовал оба) не передан javawsпотому что сам jar работает совершенно отлично, когда выполняется локально на Mac.

Актуальная проблема сейчас заключается в том, что с каждой возможной комбинацией аргументов приложениеИон всегда выходит со следующим исключением:

org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.widgets.Display.error(Unknown Source)
    at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
    at org.eclipse.swt.widgets.Display.create(Unknown Source)
    at org.eclipse.swt.graphics.Device.<init>(Unknown Source)
    at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
    at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
    at org.eclipse.swt.widgets.Display.getDefault(Unknown Source)
    at foo.bar.WebStartRunnable.<init>(WebStartRunnable.java:85)
    at foo.bar.WebStartRunnable.main(WebStartRunnable.java:155)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.javaws.Launcher.executeApplication(Launcher.java:1909)
    at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1847)
    at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1609)
    at com.sun.javaws.Launcher.run(Launcher.java:138)
    at java.lang.Thread.run(Thread.java:680)

Здесь снова приведены спецификации:

  • ОС: MacOS 10.6 (Snow Leopard) 64 бит
  • Java Runntime1.6 64 бит
  • SWT-версия: 3.6.2-cocoa-macosx-x86_64

Надеюсь, у кого-то возникла такая же проблема, и она смогла ее исправить, спасибо заранее за все ответы

ура Остановка

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Так что для всех, кто борется с той же проблемой или просто хочет функционировать файл jnlp в качестве ссылки, вот мой:

<?xml version="1.0" encoding="UTF-8" ?>
<jnlp spec="1.0+" codebase="http://your-host:8080/folder_with_jar_stuff/" href="webstart.jnlp">
  <information>
    <title>Your Applications Title</title>
    <vendor>Your name or company or whatever</vendor>
    <homepage href="http://www.a-really-funny-domain.com" />
    <description>This application does something really usefull and will make the world a better place due to it being lorem ipsum...</description>
    <icon kind="splash" href="splash.bmp"/>
  </information>

  <security>
    <all-permissions />
  </security>

  <resources>
    <jar href="your_app_as_jar.jar" />
  </resources>

  <resources os="Linux" arch="x86_64">
    <nativelib href="swt-native-3.6.2-gtk-linux-x86_64.jar" />
  </resources>
  <resources os="Linux" arch="amd64">
    <nativelib href="swt-native-3.6.2-gtk-linux-x86_64.jar" />
  </resources>
  <resources os="Linux">
    <nativelib href="swt-native-3.6.2-gtk-linux-x86.jar" />
  </resources>

  <resources os="Mac" arch="x86_64">
    <j2se version="1.6" java-vm-args="-XstartOnFirstThread" />
    <nativelib href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
  </resources>

  <resources os="Windows" arch="x86">
    <nativelib href="swt-native-3.6.2-win32-x86.jar" />
  </resources>
  <resources os="Windows" arch="x86_64">
    <nativelib href="swt-native-3.6.2-win32-x86_64.jar" />
  </resources>
  <resources os="Windows" arch="amd64">
    <nativelib href="swt-native-3.6.2-win32-x86_64.jar" />
  </resources>

  <resources>
    <jar href="log4j-1.2.16.jar" />
  </resources>

  <application-desc main-class="package.contains.class.with.main.method.ClassName" />

</jnlp>

Я знаю, что это далеко не завершено, но это работает для меня,Другими полезными ссылками были: Список ссылок на теги JNLP и, хотите верьте, хотите нет, спецификация от oracle.

1 голос
/ 28 июля 2011

Файл JNLP недействителен.Проверьте это с помощью JaNeLA и исправьте все результаты, выделенные красным, прежде чем задуматься, почему это может произойти сбой в этой, той или другой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...