从.jar运行应用程序时出现Java 3d错误

时间:2016-05-09 15:44:08

标签: java eclipse jar java-3d

你好,当我从Eclipse运行我的应用程序时它运行得很好但是当我将它作为一个可运行的jar导出时,它不会运行。 当我尝试从cmd运行它时,它给了我2个错误之一,第一个错误是在我将其导出后将#34;复制所需的库复制到子文件夹":

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文件夹在同一文件夹中

3 个答案:

答案 0 :(得分:1)

你使用完全过时的Java3D版本,这很难捆绑在任何软件中,因为你必须以某种方式设置Java库路径,你必须捆绑Java库本机库。而是使用Java3D 1.6.0 pre 12重建您的项目,它更容易使用,因为这个版本依赖于JOGL 2,它使用自动本机库加载,所有内容都打包为JAR,不再需要修改库路径,只需要处理类路径。

请关注my tutorial,尤其是最后一部分(有很多)更多信息。

最后,您使用的过时版本无法保证可以在任何最新的操作系统上运行。如果它有效,你会很幸运;如果没有,没有人会解决它。

答案 1 :(得分:0)

我认为在类路径中找不到所需的库文件(jar文件)。

您需要在类路径中设置库文件。

设置类路径的步骤: -

MyComputer-&gt;属性 - &gt;高级系统设置 - &gt;环境变量

在用户变量区域或系统变量中找到“classpath”,如果找到则编辑并放入所有jar文件链接。如果没有找到,则创建新的(点击新)并将所有jar链接放在那里并尝试运行您的应用程序

答案 2 :(得分:0)

我发现了如何解决我的问题,只需将所需的dll文件放在可执行jar文件旁边即可完成