Java 在Mac OS X上使用web start部署QT Jambi时出现问题
我有一个用eclipse构建的Java应用程序,它使用QTJambi。从命令行运行应用程序效果很好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
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,请在此处发布并更新此信息。或者,如果我有时间修改它,我也会在这里发布
有用的参考资料: