【问题标题】:runnable jar file not runnable可运行的 jar 文件不可运行
【发布时间】:2016-07-28 06:02:33
【问题描述】:

我正在尝试将我的跳棋程序从 Eclipse 导出到一个可运行的 jar 文件中。我得到一个 jar 文件,但它没有运行......它给了我关于未找到的类的神秘错误消息。 jar文件的重点不是包含它需要的所有类吗?我不知道现在该怎么办。

这是我运行 jar 时得到的结果:

D:\Dokumente\workspace>java -jar Dame.jar
Exception in thread "main" java.lang.NoClassDefFoundError: [[Lcheckers/Board$EmptySquare;
        at checkers.Board.<init>(Board.java:63)
        at checkers.Board.<init>(Board.java:49)
        at checkers.GameUI.main(GameUI.java:105)
Caused by: java.lang.ClassNotFoundException: checkers.Board$EmptySquare
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        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)
        ... 3 more

也许知道EmptySquareBoard 的内部类会有所帮助? 可能是什么问题呢?我在导出向导中尝试了“提取所需库”和“打包所需库”。


我也尝试在命令行中使用jar,但效果不佳。这是我所做的:

D:\Dokumente\workspace\Dame\bin\checkers>jar cvfe Dame.jar checkers.GameUI *.class
D:\Dokumente\workspace\Dame\bin\checkers>java -jar Dame.jar
Fehler: Hauptklasse checkers.GameUI.class konnte nicht gefunden oder geladen werden
(error: main class checkers.GameUI.class could not be found or loaded)

如果我省略了主类的包名(GameUI),它也不起作用:

D:\Dokumente\workspace\Dame\bin\checkers>jar cvfe Dame.jar GameUI *.class
D:\Dokumente\workspace\Dame\bin\checkers>java -jar Dame.jar
Exception in thread "main" java.lang.NoClassDefFoundError: GameUI (wrong name: checkers/GameUI)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        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)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

没有线索。

jar文件内容为:

D:\Dokumente\workspace\Dame\bin\checkers>jar tvf Dame.jar
     0 Thu Jan 09 01:05:26 CET 2014 META-INF/
    88 Thu Jan 09 01:05:26 CET 2014 META-INF/MANIFEST.MF
   994 Thu Jan 09 00:14:30 CET 2014 Board$1.class
  1840 Thu Jan 09 00:14:30 CET 2014 Board$EmptySquare.class
   447 Thu Jan 09 00:14:30 CET 2014 Board$GamePiece.class
  4051 Thu Jan 09 00:14:30 CET 2014 Board$Piece.class
  4399 Thu Jan 09 00:14:30 CET 2014 Board$Queen.class
  8381 Thu Jan 09 00:14:30 CET 2014 Board.class
  2946 Thu Jan 09 00:14:30 CET 2014 Checkers.class
  2708 Thu Jan 09 00:14:30 CET 2014 CheckersAB.class
  4202 Thu Jan 09 00:14:30 CET 2014 CheckersABT.class
  2464 Thu Jan 09 00:14:30 CET 2014 CheckersMinMax.class
  1324 Thu Jan 09 00:14:30 CET 2014 CheckersPieces.class
   951 Thu Jan 09 00:14:30 CET 2014 GameState.class
   804 Thu Jan 09 00:14:30 CET 2014 GameUI$1.class
   663 Thu Jan 09 00:14:30 CET 2014 GameUI$2.class
  2535 Thu Jan 09 00:14:30 CET 2014 GameUI.class
   739 Thu Jan 09 00:14:30 CET 2014 GUIBoard$1.class
  6069 Thu Jan 09 00:14:30 CET 2014 GUIBoard.class
  3776 Thu Jan 09 00:14:30 CET 2014 Move.class
   607 Thu Jan 09 00:14:30 CET 2014 MoveComparator.class
   610 Thu Jan 09 00:14:30 CET 2014 NodeVal.class
  1078 Thu Jan 09 00:14:30 CET 2014 PlayCheckersAB.class
   356 Thu Jan 09 00:14:30 CET 2014 PlayCheckersABT.class
   357 Thu Jan 09 00:14:30 CET 2014 PlayCheckersMM.class
  2466 Thu Jan 09 00:14:30 CET 2014 PlayTournament.class
  1183 Thu Jan 09 00:14:30 CET 2014 Square.class
   241 Thu Jan 09 00:14:30 CET 2014 ZeroSumGame.class

【问题讨论】:

  • 所有类都在同一个包中吗?你有不止一个类使用main() 方法吗?
  • @pm77:刚刚更新了帖子。所有类都在packacke“检查器”中,当然除了一些库(apache commons)。有一个以上的类文件有一个 main 方法,但我告诉 Eclipse 哪个是正确的。我也用 jar-command 试过了。没有运气。
  • 显示你的 JAR 的 manifest.
  • @pm77:我认为清单是与“e”选项内联的(GameUI 或 checkers.GameUI,两者都不起作用)?我没有多余的文件。
  • @divanov:我用信息更新了我的问题。

标签: java jar export


【解决方案1】:

好的,我找到了答案。在帖子eclipse doesn't compile the project 有人建议切换到新的工作空间。我这样做是因为除了神秘的非工作 jar 文件之外,Eclipse 也不再构建我的 java 文件。我切换到一个新的工作空间,重新导入项目,瞧,导出的jar文件可以运行了!

感谢您的努力,尤其是对 divanov!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2012-11-23
    • 2014-05-06
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多