2013-04-17 75 views
0

我有一個java webstart應用程序,它使用swt作爲接口(幷包含DJ Native Swing)。該應用程序在Windows上運行良好,直到我嘗試將linux和mac osx swt jar添加到應用程序以支持這些平臺。當從只有正確jar鏈接的netbeans啓動時,該應用程序在linux下運行良好,但在任何平臺上通過java webstart啓動應用程序時,似乎加載了錯誤的jar文件。Java webstart在windows上加載linux swt jars

這就是我在我的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文件。

我希望任何人有一個想法,爲什麼這是錯的。

+0

*「歡呼聲, Dolf。」*這是4行噪音。離開sigs。出問題。 2)*「爲什麼這會出錯?」*是一個可能從這些詞語推斷的問題。這是你的問題嗎?如果是這樣,交替添加它作爲[編輯](http://stackoverflow.com/posts/16065539/edit)*形成一個明確的問題*並編輯到..question中。 –

回答

0

我發現問題出在哪裏。

在Netbeans中,我將swt jar文件鏈接到「庫」下。我對netbeans/java中的這些工作是如何工作的瞭解有限(我不是java開發人員,可以從問題推斷出來),但我猜這會導致所有鏈接的swt庫被下載,無論launch.jnlp是什麼。因此,在錯誤的平臺上錯誤的jar文件。

構建時需要做什麼排除NetBeans中庫的列表中的swt jars,然後指定jnlp文件中的資源。這樣,webstart將只下載適用資源標籤中找到的swt罐子。

如果您還需要對它們進行簽名,請將以下部分添加到您的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>