0

我有一个使用 Eclipse 构建的 Java 应用程序,它使用 QTJambi。从命令行运行应用程序可以完美运行。

java -d32 -XstartOnFirstThread -jar MyApplication.jar someArg

但是,尝试使用 WebStart 部署应用程序被证明是困难的。我已经阅读了很多资料,似乎很多人在使其在 Mac OS X 上运行时遇到问题。问题似乎是本机库没有正确加载。下面提供了堆栈跟踪。

CWindow 的 _nativeHide 遇到错误:java.lang.reflect.InvocationTargetException
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 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.ExceptionInInitializerError
    在 com.trolltech.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.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(NativeLibraryManager.java:431)
    在 com.trolltech.qt.internal.NativeLibraryManager.loadQtLibrary(NativeLibraryManager.java:355)
    在 com.trolltech.qt.Utilities.loadQtLibrary(Utilities.java:140)
    在 com.trolltech.qt.Utilities.loadQtLibrary(Utilities.java:136)
    在 com.trolltech.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 中找不到库“libQtCore.4.dylib” /Library/PrivateFrameworks/JavaApplicationLauncher.framework/Resources:.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
    在 com.trolltech.qt.internal.NativeLibraryManager.loadLibrary_helper(NativeLibraryManager.java:486)
    在 com.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(NativeLibraryManager.java:426)
    ... 11 更多

这是 webstart.jnlp 文件的摘录:

   `[资源`]
        `[j2se 版本="1.5+"/`]
    `[jar href="${MEDIA_URL}application/webstart/MyApplication.jar" /`]
        ……
        `[jar href="${MEDIA_URL}application/webstart/MyApplication_lib/qtjambi-4.5.2_01.jar" /`]

  `[资源 os="Mac OS X"`]
    `[j2se 版本="1.5+" java-vm-args="-d32 -XstartOnFirstThread"/`]
    `[jar href="${MEDIA_URL}application/webstart/MyApplication_lib/qtjambi-macosx-gcc-4.5.2_01.jar" /`]
  `[/资源`]

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

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

编辑:

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

4

1 回答 1

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 Community Port to 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

于 2010-09-17T01:23:37.687 回答