2014-01-08 266 views
0

我想将我的跳棋程序从Eclipse导出到可运行jar文件中。我得到一个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 

也许它有助于知道EmptySquare是一个内部类的Board? 可能是什么问题?我在导出向导中尝试了“提取所需的库”和“包需要的库”。


我也尝试过使用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 
+0

所有类都在同一个包中?你用'main()'方法有多个类吗? –

+0

@ pm77:刚更新了帖子。所有类都在packacke“跳棋”中,当然除了一些libs(apache commons)。有一个主要方法的类文件不止一个,但我告诉Eclipse哪一个是正确的。我也用jar命令试了一下。没有运气。 – jackthehipster

+1

显示您的JAR的[清单](http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html)。 –

回答

0

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

感谢您的努力,特别是divanov!