Java webstart在Windows上加载linux swt jar

时间:2013-04-17 16:38:37

标签: java swt java-web-start

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

这是我在launch.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> 

如果我理解正确,这应该导致窗口(取决于拱门)只加载swt-win32-x86.jar。但是当我在Windows 7 64位上启动应用程序,但是使用32位jvm时,我收到以下错误: NativeSwing [1]:引起:java.lang.UnsatisfiedLinkError:无法加载SWT库。原因: NativeSwing [1]:java.library.path中没有swt-gtk-4234 NativeSwing [1]:java.library.path中没有swt-gtk NativeSwing [1]:无法加载库:C:\ Users \ dolf.swt \ lib \ win32 \ x86 \ swt-gtk-4234.dll NativeSwing [1]:无法加载库:C:\ Users \ dolf.swt \ lib \ win32 \ x86 \ swt-gtk.dll

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

我希望有人知道为什么会出错。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。

在Netbeans中,我在“库”下链接了swt jar文件。我对这些东西在netbeans / java中是如何工作的理解有限(我不是可以从问题推断的java开发者),但我想这会导致所有链接的swt库被下载,无论launch.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>