问题在Mac OS X上使用Web start部署QT Jambi

时间:2010-08-20 05:32:00

标签: 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.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

这是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`]

错误告诉我在类路径中找不到qtjambi-deployment.xml。我打开了qtjambi-macosx-gcc-4.5.2_01.jar,肯定有qtjambi-deployment.xml文件。

资源os =“Max OS X”节点肯定是由JNLP加载的,因为我之前收到了不同的错误,要求我将-d32放入vm args。有谁知道这可能导致这个错误到底是什么?

编辑:

当webstarting到Windows时,应用程序运行正常。

1 个答案:

答案 0 :(得分:0)

对于之后的人来说,这是我们发现的有关通过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工作的方式进行自我配置。不幸的是,此时它已经破坏了mac os x。

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

http://qt.gitorious.org/qt-jambi/community-port-to-4_6 http://sourceforge.net/apps/trac/qtjambi/ticket/37

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

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

有用的参考资料:

http://doc.qt.nokia.com/qtjambi-4.3.5_01/com/trolltech/qt/qtjambi-systemproperties.html