【问题标题】:Fixing Error: cannot find main class with jar修复错误:找不到带有 jar 的主类
【发布时间】:2017-04-16 16:13:39
【问题描述】:

我的 java 游戏(使用 lwjgl 和 Eclipse 构建)在从 Eclipse 导出为 Runnable jar 后将无法运行。该程序在 Eclipse 中运行良好,并且导出的 jar 具有正确的 Manifest 文件格式。执行完这个Jar后,报错:

C:\Users\7rent\Desktop>java -jar hw.jar

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: no lwjgl 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 org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
at java.security.AccessController.doPrivileged(Native Method)
at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
at core.SecDef.main(SecDef.java:13)
... 5 more

然后我(使用堆栈溢出答案)使用 JarSplice 将 lwjgl jar 和 native 添加到这个 Jar 中。生成的 fatjar 给了我这个:

C:\Users\7rent\Desktop>java -jar SD.jar

错误:无法找到或加载主类 core.SecDef

jar 的清单包含以下内容: https://i.stack.imgur.com/ccpOH.png

FatJar 的内部是这样的: https://i.stack.imgur.com/hVBcD.png

我今天安装了 JRE 和 JDK,这两个都是最新版本,没有对系统变量进行任何配置。该项目设置为符合 java 6。

提前致谢:)

【问题讨论】:

  • 您不能在大多数操作系统的 jar 文件中“按原样”使用本机库。您需要将库解压缩到普通磁盘文件,然后加载。
  • 您使用了JarSplice's Fat Jar Creator 还是Eclipse 的可运行jar 导出器?我怀疑 JarSplice 会添加一些神奇的 Java 代码来将 DLL 提取到磁盘并从那里加载它们。
  • 我首先使用了可运行的 jar 导出器,然后使用 JarSplice 将本地人添加到该 jar 中。
  • 不要将第三方库添加到您的 JAR 中!在清单Class-Path 中标识的子目录中 分发它们。 docs.oracle.com/javase/tutorial/deployment/jar/downman.html
  • 感谢库的帮助,但为什么会导致“无法找到或加载主类”错误?

标签: java eclipse jar lwjgl


【解决方案1】:

原因在异常堆栈跟踪中给出:

原因:java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

JVM 没有找到 lwjgl 本机库。

【讨论】:

  • 我用 jarsplice 添加了 lwjgl.jar 和本地人,然后得到另一个“找不到主类”错误。
  • @TrentStevens 也许这个问答有帮助:Eclipse: Packaging a JAR with natives。这也是关于 LWJGL 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2017-03-30
  • 2012-11-05
  • 2014-12-05
  • 2021-07-05
相关资源
最近更新 更多