2014-01-08 7 views
0

Я пытаюсь экспортировать мою программу шашек из Eclipse в исполняемый файл jar. Я получаю файл jar, но он не запускается ... Это дает мне загадочные сообщения об ошибках в отношении классов, которые не найдены. Не является ли смысл файла jar, что он содержит все классы, в которых он нуждается? Я понятия не имею, что теперь делать.runnable jar file not runnable

Вот что я получаю, когда я бег банки:

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) 

Нет подсказки.

Содержимое файла фляга:

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: только что обновил сообщение. все классы находятся в пакетных «шашках», за исключением, конечно, некоторых 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-файлы. Я переключился на новое рабочее пространство, заново импортировал проект, и voila, экспортированный файл jar можно запустить!

Спасибо за ваши усилия, особенно для диванов!