簡體   English   中英

從 .jar 運行應用程序時出現 Java 3d 錯誤

[英]Java 3d error when running application from .jar

您好,當我從 Eclipse 運行我的應用程序時,它運行得很好,但是當我將它導出為可運行的 jar 時,它無法運行。 當我嘗試從 cmd 運行它時,它給了我 2 個錯誤之一,第一個錯誤是在我使用“將所需的庫復制到子文件夾中”導出它之后:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:189)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:180)
    at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:137)
    at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:948)
    at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:280)
    at javax.media.j3d.Canvas3D.<clinit>(Canvas3D.java:3862)
    at Main.Game.<init>(Game.java:39)
    at Main.Main.main(Main.java:6)

當我將子文件夾的名稱從 IslandDomination_lib 更改為 lib 時,它給了我另一個錯誤:

    Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/j3d/Canvas3D
      at Main.Main.main(Main.java:6)
    Caused by: java.lang.ClassNotFoundException: javax.media.j3d.Canvas3D
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

我試過幾種方式運行它:

1.

java.exe -jar IslandDomination.jar

2.

java.exe -cp "lib/j3dcore.jar;lib/j3dutils.jar;lib/vecmath.jar" -jar IslandDomination.jar

3.使用另一個java程序為我運行它:

package main;
import java.io.File;
import java.io.IOException;

public class Main {
  public static void main(String[] args) throws IOException,     InterruptedException{
    ProcessBuilder pb = new   ProcessBuilder(System.getProperty("java.home")+"\\bin\\java.exe", "-cp" , "\"lib/j3dcore.jar;lib/j3dutils.jar;lib/vecmath.jar\"" , "-jar" , "IslandDomination.jar");
    pb.directory(new File("./"));
    Process p = pb.start();
    p.waitFor();
  }
}

我的 jar 的內部結構由 4 個文件夾組成:

J3DBool
Main
Maths
META-INF

包含所需 jar 的文件夾與主 jar 位於同一文件夾中

您使用的是完全過時的 Java3D 版本,很難將其捆綁到任何軟件中,因為您必須以某種方式設置 Java 庫路徑,並且必須同時捆綁 Java 庫本機庫。 而是使用 Java3D 1.6.0 pre 12 重建您的項目,它更容易使用,因為該版本依賴於使用自動本地庫加載的 JOGL 2,並且所有內容都打包為 JAR,不再需要修改庫路徑,只需照顧好類路徑。

請按照我的教程,尤其是最后一節提供(很多)更多信息。

最后,不能保證您使用的過時版本可以在任何最新的操作系統上運行。 如果它有效,你會很幸運; 如果沒有,沒有人會修復它。

我認為在類路徑中找不到所需的庫文件(jar 文件)。

您需要在類路徑中設置庫文件。

設置類路徑的步驟:-

我的電腦->屬性->高級系統設置->環境變量

如果找到,請在用戶變量區域或系統變量中找到“類路徑”,然后編輯並放置所有 jar 文件鏈接。 如果未找到,則創建新的(單擊新的)並將所有 jar 鏈接放在那里並嘗試運行您的應用程序

我發現了如何解決我的問題,只需將所需的 dll 文件放在可執行 jar 文件旁邊即可完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM