Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java URLClassLoader ClassNotFoundException

I have to write a .jar class loader in an assignment for school. I've found this code in another question but can't figure out why it wont work.

I've set the path to be an absolute path to make sure it references to the right file.

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);

The error I get is:

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)

The package declaration in the TicTacToe is package spatbord.game;

The contents of the jar are:

spatbord
 -> game
  -> TicTacToe.class

What am I not seeing here?

like image 653
Pepijn Compaan Avatar asked Jun 26 '26 19:06

Pepijn Compaan


1 Answers

Look at this stacktrace:

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)

and the contents:

spatbord
 -> game
  -> TicTacToe.class

Specifically at this line:

java.lang.ClassNotFoundException: spatboard.game.TicTacToe

the JRE is expecting spatbord.game.TicTacToe, so this means you mispelled your package spatboard spatbord.

like image 151
ryekayo Avatar answered Jun 28 '26 09:06

ryekayo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!