2010-08-20 137 views
0

我有一个使用Eclipse构建的Java应用程序,它使用QTJambi。从命令行运行应用程序完美地工作。问题在Mac OS X上使用web start启动QT Jambi

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中没有在classpath中找到。我打开了qtjambi-macosx-gcc-4.5.2_01.jar,那里肯定有qtjambi-deployment.xml文件。

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

编辑:

当webstarting到Windows时,应用程序运行良好。

回答

0

对于那些来了之后,这是我们发现的有关通过Webstart的占碑部署到Mac OS X.

qtjambi-MacOSX的-GCC-4.5.2_01无法安装时发现/从Webstart的启动信息。如果此库位于您的路径上,则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需要告知我们通过在webstart启动碑库,并把自己以这样的方式,允许在webstart工作配置。不幸的是,在这个时候它已经被破解了。

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

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

我已经研究了这个错误,以及,它需要改变一行代码来获得工作,即,改变的类加载器玩Webstart的尼斯(更安全类加载器)。我还没有尝试过,因为构建系统相当不合适,没有时间进行适当的调查。

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

有用的参考资料:

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