Java 在Mac OS X上使用web start部署QT Jambi时出现问题

Java 在Mac OS X上使用web start部署QT Jambi时出现问题,java,macos,qt,java-web-start,qt-jambi,Java,Macos,Qt,Java Web Start,Qt Jambi,我有一个用eclipse构建的Java应用程序,它使用QTJambi。从命令行运行应用程序效果很好 java -d32 -XstartOnFirstThread -jar MyApplication.jar someArg 然而,尝试使用WebStart部署应用程序被证明是困难的。我读了很多书,似乎很多人在Mac OS X上都遇到了问题。问题似乎是本机库没有正确加载。下面提供了堆栈跟踪 CWindow's _nativeHide encountered error: java.lang.ref

我有一个用eclipse构建的Java应用程序,它使用QTJambi。从命令行运行应用程序效果很好

java -d32 -XstartOnFirstThread -jar MyApplication.jar someArg
然而,尝试使用WebStart部署应用程序被证明是困难的。我读了很多书,似乎很多人在Mac OS X上都遇到了问题。问题似乎是本机库没有正确加载。下面提供了堆栈跟踪

CWindow's _nativeHide encountered error: java.lang.reflect.InvocationTargetException 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.invokeMainMethod(Launcher.java:1819) Caused by: java.lang.ExceptionInInitializerError at com.trolltech.qt.QtJambiObject.(QtJambiObject.java:60) at com.engage.agentdesktop.Application.main(Application.java:25) ... 5 more Caused by: java.lang.RuntimeException: Loading library failed, progress so far: No 'qtjambi-deployment.xml' found in classpath, loading libraries via 'java.library.path' Loading library: 'libQtCore.4.dylib'... - using 'java.library.path' at com.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(NativeLibraryManager.java:431) at com.trolltech.qt.internal.NativeLibraryManager.loadQtLibrary(NativeLibraryManager.java:355) at com.trolltech.qt.Utilities.loadQtLibrary(Utilities.java:140) at com.trolltech.qt.Utilities.loadQtLibrary(Utilities.java:136) at com.trolltech.qt.QtJambi_LibraryInitializer.(QtJambi_LibraryInitializer.java:56) ... 7 more Caused by: java.lang.RuntimeException: Library 'libQtCore.4.dylib' was not found in 'java.library.path'=/Users/smeatonj/Desktop/Engage Agent Desktop.app/Contents/Resources/Java:/System/Library/PrivateFrameworks/JavaApplicationLauncher.framework/Resources:.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java at com.trolltech.qt.internal.NativeLibraryManager.loadLibrary_helper(NativeLibraryManager.java:486) at com.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(NativeLibraryManager.java:426) ... 11 more CWindow的_nativeHide遇到错误:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:597) 位于com.sun.javaws.Launcher.invokeMainMethod(Launcher.java:1819) 原因:java.lang.ExceptionInInitializeError 在com.trolletech.qt.QtJambiObject.(QtJambiObject.java:60) 位于com.engage.agentdesktop.Application.main(Application.java:25) ... 还有5个 原因:java.lang.RuntimeException:加载库失败,到目前为止的进度: 在类路径中找不到“qtjambi deployment.xml”,通过“java.library.path”加载库 正在加载库:“libQtCore.4.dylib”。。。 -使用“java.library.path” 在com.trolletech.qt.internal.NativeLibraryManager.LoadNativellibrary(NativeLibraryManager.java:431) 位于com.trolletech.qt.internal.NativeLibraryManager.loadQtLibrary(NativeLibraryManager.java:355) 在com.trolletech.qt.Utilities.loadQtLibrary上(Utilities.java:140) 在com.trolletech.qt.Utilities.loadQtLibrary(Utilities.java:136)上 在com.trolletech.qt.QtJambi_LibraryInitializer上。(QtJambi_LibraryInitializer.java:56) ... 还有7个 原因:java.lang.RuntimeException:在“java.Library.path”=/Users/smeatonj/Desktop/Engage Agent Desktop.app/Contents/Resources/java:/System/Library/privateframes/JavaApplicationLauncher.framework/Resources:。:/Library/java/Extensions:/System/Library/java/Extensions:/usr/lib/java 在com.trolletech.qt.internal.NativeLibraryManager.loadLibrary\u helper上(NativeLibraryManager.java:486) 在com.trolletech.qt.internal.NativeLibraryManager.LoadNativellibrary(NativeLibraryManager.java:426) ... 还有11个 这是webstart.jnlp文件的摘录:

`[resources`] `[j2se version="1.5+"/`] `[jar href="${MEDIA_URL}application/webstart/MyApplication.jar" /`] .... `[jar href="${MEDIA_URL}application/webstart/MyApplication_lib/qtjambi-4.5.2_01.jar" /`] `[resources os="Mac OS X"`] `[j2se version="1.5+" java-vm-args="-d32 -XstartOnFirstThread"/`] `[jar href="${MEDIA_URL}application/webstart/MyApplication_lib/qtjambi-macosx-gcc-4.5.2_01.jar" /`] `[/resources`] `[资源`] `[j2se version=“1.5+”/`] `[jar href=“${MEDIA\u URL}应用程序/webstart/MyApplication.jar”/`] .... `[jar href=“${MEDIA\u URL}应用程序/webstart/MyApplication\u lib/qtjambi-4.5.2\u 01.jar”/`] `[resources os=“Mac os X”`] `[j2se version=“1.5+”java vm args=“-d32-XstartOnFirstThread”/`] `[jar href=“${MEDIA\u URL}应用程序/webstart/MyApplication\u lib/qtjambi-macosx-gcc-4.5.2_01.jar”/`] `[/resources`] 错误告诉我在类路径中找不到qtjambi-deployment.xml。我已经打开了qtjambi-macosx-gcc-4.5.2_01.jar,那里肯定有qtjambi-deployment.xml文件

resources os=“Max os X”节点肯定是由JNLP加载的,因为在此之前我收到了不同的错误,需要我将-d32放入vm参数中。有人知道到底是什么导致了这个错误吗

编辑:


当webstart启动到Windows时,应用程序运行良好。

对于之后的应用程序,这是我们发现的有关通过webstart将Jambi部署到Mac OS X的信息

从webstart安装/启动时,找不到qtjambi-macosx-gcc-4.5.2_01。如果此库位于您的路径上,webstart将能够找到并使用它,并将正确启动。此外,还需要设置一些JNLP属性

  <resources os="Mac OS X">
    <!-- Currently Unsupported-->
    <property name="com.trolltech.launcher.webstart" value="true" />
    <property name="com.trolltech.verbose-loading" value="true" />
    <j2se version="1.5+" java-vm-args="-d32 -XstartOnFirstThread"/>
    <jar href="/path/to/qtjambi-macosx-gcc-4.5.2_01.jar" />
  </resources>

属性com.trolltech.launcher.webstart需要通知Jambi库我们正在通过webstart启动,并以允许webstart工作的方式配置自身。不幸的是,MacOSX在这个时候已经崩溃了

QTJambi社区端口到4.6解决了上述问题,但引入了一个新问题

我也研究过这个bug,它需要更改一行代码才能工作,即更改类加载器以更好地使用webstart(更安全的类加载器)。我还没有尝试,因为构建系统非常令人不快,没有时间进行适当的调查

因此,如果您在Mac OSX上部署带有webstart的QT Jambi应用程序时遇到问题,您现在知道原因了。如果有人想更改4.6,请在此处发布并更新此信息。或者,如果我有时间修改它,我也会在这里发布

有用的参考资料: