代码之家  ›  专栏  ›  技术社区  ›  Josh Smeaton

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

  •  0
  • Josh Smeaton  · 技术社区  · 14 年前

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

    java -d32 -XstartOnFirstThread -jar MyApplication.jar someArg
    

    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
    
    

    这是本书的摘录网站启动.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-部署.xml在类路径中找不到。我已经打开了qtjambi-macosx-gcc-4.5.2_01.jar,这里肯定有qtjambi-部署.xml在那里归档。

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

    编辑:

    1 回复  |  直到 14 年前
        1
  •  0
  •   Josh Smeaton    14 年前

    对于后面的人,这是我们发现的关于通过webstart将Jambi部署到macosx的信息。

    从webstart安装/启动时,找不到qtjambi-macosx-gcc-4.5.2\u 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解决了上述问题,但引入了一个新问题。

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

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

    有用的参考资料:

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