2016-03-15 41 views
0

引用的庫結構:(我沒能做到,在IDE運行良好) enter image description hereJava程序的工作原理IDE中,但在編譯(蝕)之後給出了一個java.lang.NoClassDefFoundError

堆棧跟蹤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/newdawn/slick/SlickException 
    at com.gametest.game.GameLauncher.main(GameLauncher.java:61) 
Caused by: java.lang.ClassNotFoundException: org.newdawn.slick.SlickException 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

基本上我使用slick和LWJGL來獲得音頻工作,在IDE內運行良好(構建路徑配置,選擇本地對象爲lwjgl),但是編譯並運行時,它崩潰並且在控制檯中給出上面的堆棧跟蹤。

我正在運行64位macosx,代碼在eclipse中編寫和編譯。使用圖書館:LWJGL,光滑(http://slick.ninjacave.com/

從「終端」控制檯中使用跑:

java -cp ~/Desktop/FirstGame.jar com.gametest.game.GameLauncher 

這似乎是一個常見的錯誤,但經過了大量的時間在網絡上搜索,我沒有遇到解決它的答案。

(編輯) 涉及到:ERROR!! AppGameContainer java.lang.ClassNotFoundException

回答

0

我做到了 (我很爲自己感到驕傲,我理解了它自己,使用一些文檔和一些我的大腦)

有時候,你需要有人推動自己到最高層。

我基本上是通過進入MANIFEST.MF並添加一行固定它: Manifest file

以及在所謂的「遊戲」

單個文件夾移動的所有jar文件(和二進制文件)

正確完成後,它看起來像這樣: The folder structure

1

我覺得你有與第三方庫的問題未列入到您的罐子(但他們可以在IDE項目的類路徑中找到,這是爲什麼它在那裏工作)。

您可以將任何第三方jar放入jar旁邊的/ lib目錄中並使用-cp JVM參數。 或者你可以嘗試使用像http://one-jar.sourceforge.net/,Maven構建工具的「maven-shade-plugin」插件等工具

+0

所以基本上你所說的是,IDE「知道」在哪裏可以找到這些類,但它不會自動將它們包含在編譯後的產品中? 由於IDE不會自動繪製出奇怪的圖像,因此您需要將這些圖庫放入您的成品中。 它爲什麼不自動將這些庫添加到jar文件中? 是有原因嗎? – AgentM

+0

是的,IDE可以找到依賴關係,因爲您可以爲項目配置類路徑並向其中添加jar。這是一個長達90年代的故事,每個初學者都與你的頭痛完全一樣:)問題在於,Java沒有任何「超級jar」規範來發布具有所有必需jar依賴項的檔案。因此,您必須使用外部jar或特殊構建工具的變通方法,這些工具嘗試通過不同方法解決此問題 – Cootri

1

FirstGame.jar是否包含所有在它下面的lib文件?如果沒有,你將需要包含所有必需的jar文件以添加到classpath中。

喜歡的東西java -cp ~/Desktop/FirstGame.jar;lib/*" com.gametest.game.GameLauncher

+0

java -cp「〜/ Desktop/FirstGame.jar; lib/*」com.gametest.game.GameLauncher did not work :「錯誤:無法找到或加載主類com.gametest.game.GameLauncher」 java - > javac(編譯)給出:「錯誤:類名」com.gametest.game.GameLauncher「只接受if註釋處理明確要求 1錯誤「 所以我也不幸運。 在IDE中是否有一個選項可讓您將類庫添加到類路徑中?或者你需要從命令行執行此操作嗎? – AgentM

+0

'java -cp〜/ Desktop/FirstGame.jar; lib/*「com.gametest.game.GameLauncher'你給我的是不正確的。 .gametest.game.GameLauncher'至少運行了遊戲,然後崩潰,而不是在終端命令提示符內給我一個錯誤。 然後我的問題是:「lib/*」是什麼意思?是在jar中,旁邊的jar?請給我的文件結構,在哪裏放置lib文件夾等 – AgentM

+0

@AgentM/lib應該是一個文件夾(裏面〜或使用合格的路徑,如果它不存在),其中應包含所有的jar文件你的遊戲需要(所有的第三方+你自己的,如果有的話)另一個,vs:是unix和windows的約定,它的好處是你解決了它,是的,你需要從命令行運行它(我猜你想要什麼,日食它已經運行,對吧?) – Nrj

0

看起來像日食找不到包含在油滑org.newdawn.slick.SlickException類。或者您沒有將Slick.JAR文件添加到適當的位置,或者您的類路徑設置不正確。

嘗試添加該slickJar在構建路徑應該解決您的問題

+0

艾姆,有68個下載,我下載哪一個? – AgentM

相關問題