Java webstart在windows上加载linux swt jar



我有一个java webstart应用程序,它使用swt作为接口(包括DJ Native Swing)。该应用程序在windows上运行良好,直到我尝试将linux和mac osx swt jar添加到应用程序中以支持这些平台。当从netbeans启动时,应用程序在linux下运行良好,只有正确的jar链接,但当通过java webstart在任何平台上启动应用程序时,似乎加载了错误的jar文件。

这是我在我的启动。JNLP(以及其他内容):

<resources os="Windows" arch="x86">
    <j2se java-vm-args="-Xmx512m" version="1.5+"/>
    <jar href="lib/swt-win32-x86.jar"/>
    <nativelib href="lib/swt-win32-x86.jar"/>
</resources>
<resources os="Windows" arch="x86_64">
    <j2se java-vm-args="-Xmx512m" version="1.5+"/>
    <jar href="lib/swt-win32-x86_64.jar"/>
    <nativelib href="lib/swt-win32-x86_64.jar"/>
</resources>
<resources os="Windows" arch="amd64">
    <j2se java-vm-args="-Xmx512m" version="1.5+"/>
    <jar href="lib/swt-win32-x86_64.jar"/>
    <nativelib href="lib/swt-win32-x86_64.jar"/>
</resources>
<resources os="Linux" arch="i386">
    <j2se java-vm-args="-Xmx512m" version="1.5+"/>
    <jar href="lib/swt-linux-x86.jar"/>
    <nativelib href="lib/swt-linux-x86.jar"/>
</resources>
<resources os="Linux" arch="amd64">
    <j2se java-vm-args="-Xmx512m" version="1.5+"/>
    <jar href="lib/swt-linux-x86_64.jar"/>
    <nativelib href="lib/swt-linux-x86_64.jar"/>
</resources>
<resources os="Mac OS X" arch="x86_64">
    <j2se java-vm-args="-XstartOnFirstThread -Xmx512m" version="1.5+"/>
    <jar href="lib/swt-macos-x86_64.jar"/>
</resources>
<resources os="Mac OS X" arch="x86">
    <j2se java-vm-args="-XstartOnFirstThread -Xmx512m" version="1.5+"/>
    <jar href="lib/swt-macos.jar"/>
</resources> 

如果我理解正确的话,这应该导致在windows上(取决于arch)只加载swt-win32-x86.jar。但是当我在windows 7 64位上启动应用程序时,但是使用32位jvm,我得到以下错误:NativeSwing[1]:由:java.lang.UnsatisfiedLinkError: Could not load SWT library引起。原因:NativeSwing[1]:没有swt-gtk-4234在java.library.pathNativeSwing[1]:在java.library.path中没有swt-gtkNativeSwing[1]:无法加载库:C:Usersdolf.swtlibwin32x86swt-gtk-4234.dllNativeSwing[1]:无法加载库:C:Usersdolf.swtlibwin32x86swt-gtk.dll

当然,在Windows上找不到swt-gtk,它应该只在Linux上需要。如果我检查java的临时internet文件查看器下的java控制面板中的参考资料,我确实看到java webstart已经下载了swt-linux-x86.jar和swt-win32-x86.jar。显然,java webstart下载了错误的jar文件。

我希望任何人都知道为什么这是错误的

我已经查出问题所在了。

在Netbeans中,我在"libraries"下链接了swt jar文件。我对这些东西如何在netbeans/java中工作的理解有限(我不是java开发人员,可以从问题中推断),但我猜这导致所有链接的swt库都被下载,无论启动什么。jnlp指定。因此在错误的平台上出现了错误的jar文件。

构建时需要做的是从netbeans中的库列表中排除swt jar,然后在jnlp文件中指定资源。这样,webstart将只下载在适用的资源标签中找到的swt jar文件。

如果您也需要对它们进行签名,请将以下部分添加到build.xml中,这将确保在签名开始之前将swt jar文件复制到dist/lib目录下,以便netbeans自动对它们进行签名(dist/lib目录下的每个jar文件都会正常签名)。

<target name="-post-jar">
    <copy todir="${jnlp.dest.dir}/lib/">
        <fileset dir="${build.dir}/../lib/">
            <filename name="swt*.jar" />
        </fileset>
    </copy>
</target>

最新更新