0

我有一个使用 swt 作为界面的 java webstart 应用程序(并且包括 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> 

如果我理解正确,这应该会导致在 Windows(取决于拱门)上只加载 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 控制面板中的资源,我确实看到 java webstart 已经下载了 swt-linux-x86.jar 和 swt-win32-x86.jar。显然,java webstart 正在下载错误的 jar 文件。

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

4

1 回答 1

0

我发现了问题所在。

在 Netbeans 中,我在“库”下链接了 swt jar 文件。我对这些东西在 netbeans/java 中的工作方式了解有限(我不是从问题中推断出来的 java 开发人员),但我想这会导致所有链接的 swt 库都被下载,无论 launch.jnlp 指定什么. 因此,错误平台上的错误 jar 文件。

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

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

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

</target>
于 2013-04-24T09:36:55.863 回答