【问题标题】:Java webstart loading linux swt jars on windowsJava webstart 在 Windows 上加载 linux swt jars
【发布时间】:2013-04-10 12:57:37
【问题描述】:

我有一个 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> 

如果我理解正确,这应该会导致在 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 控制面板中检查资源,我确实看到 swt-linux-x86.jar 和 swt-win32-x86.jar 都已被 java webstart 下载。很明显,java webstart 正在下载错误的 jar 文件。

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

【问题讨论】:

  • “干杯,Dolf。” 那是 4 行噪音。留下签名。出问题了。 2) “为什么会出错?” 是一个可以从大量单词中推断出来的问题。那是你的问题吗?如果是这样,请将其添加为edit,交替形成一个明确的问题并将其编辑到..question中。

标签: java swt java-web-start


【解决方案1】:

我发现了问题所在。

在 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 会自动对它们进行签名(每个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>

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2012-09-14
    • 2013-10-01
    • 2012-12-07
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多