2015-04-16 42 views
1

我必須在學校的作業中寫一個.jar class loader。我在另一個問題中發現了這個代碼,但不知道爲什麼它不會工作。Java URLClassLoader ClassNotFoundException

我已經設置了路徑爲絕對路徑,以確保它引用了正確的文件。

System.out.println("Loading game: " + name); 
URL url = new URL("file:///home/<name>/Documents/School/thema2.3/batavus/batavus/gamemodules/TicTacToe.jar"); 
ClassLoader loader = new URLClassLoader(new URL[]{url}); 
Class<?> clazz = loader.loadClass("spatboard.game." + name); 
Class<? extends Game> boardClass = clazz.asSubclass(Game.class); 
Constructor<? extends Game> ctor = boardClass.getConstructor(); 
return ctor.newInstance(board); 

我得到的錯誤是:

Loading game: TicTacToe 
java.lang.ClassNotFoundException: spatboard.game.TicTacToe 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at spatbord.loader.GameLoader.loadModule(GameLoader.java:29) 
at spatbord.model.Board.<init>(Board.java:51) 
at spatbord.controller.GameController.onMatchStarted(GameController.java:157) 
at spatbord.connection.Server.matchStarted(Server.java:428) 
at spatbord.connection.Server.handleInput(Server.java:346) 
at spatbord.connection.Server.run(Server.java:145) 
at java.lang.Thread.run(Thread.java:745) 

TicTacToe包聲明是package spatbord.game;

罐的內容是:

spatbord 
-> game 
    -> TicTacToe.class 

是什麼我不在這裏看到?

+2

jar tf命令查看您的jar內容並更新您的問題結果 – eliasah

+0

'spatboard.game.TicTacToe'有一個錯誤的地方.. – ryekayo

+0

change'loader.loadClass(「spatboard.game。」+ name); 'to loader.loadClass(「spatbord.game。」+ name);' – Jimmy

回答

-1

請在第三行代碼中使用URLClassLoader而不是ClassLoader。

URLClassLoader loader = new URLClassLoader(new URL[]{url}); 

讓我知道這工作與否。

3

看這個堆棧跟蹤:

Loading game: TicTacToe 
java.lang.ClassNotFoundException: spatboard.game.TicTacToe 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at spatbord.loader.GameLoader.loadModule(GameLoader.java:29) 
at spatbord.model.Board.<init>(Board.java:51) 
at spatbord.controller.GameController.onMatchStarted(GameController.java:157) 
at spatbord.connection.Server.matchStarted(Server.java:428) 
at spatbord.connection.Server.handleInput(Server.java:346) 
at spatbord.connection.Server.run(Server.java:145) 
at java.lang.Thread.run(Thread.java:745) 

和內容:

spatbord 
-> game 
    -> TicTacToe.class 

具體地在這行:

java.lang.ClassNotFoundException: spatboard.game.TicTacToe

的JRE期待spatbord.game.TicTacToe,所以這個裝置你拼錯了你的包裹spatboardspatbord