首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java URLClassLoader ClassNotFoundException

Java URLClassLoader ClassNotFoundException
EN

Stack Overflow用户
提问于 2015-04-16 23:56:49
回答 2查看 29.9K关注 0票数 2

我必须在学校的作业中写一个.jar class loader。我在另一个问题中找到了这段代码,但我不明白为什么它不能工作。

我已经将路径设置为绝对路径,以确保它引用正确的文件。

代码语言:javascript
复制
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);

我得到的错误是:

代码语言:javascript
复制
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;

jar的内容是:

代码语言:javascript
复制
spatbord
 -> game
  -> TicTacToe.class

我在这里看不到什么?

EN

回答 2

Stack Overflow用户

发布于 2015-04-17 00:06:41

看看这个堆栈跟踪:

代码语言:javascript
复制
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)

内容如下:

代码语言:javascript
复制
spatbord
 -> game
  -> TicTacToe.class

特别是在这一行:

java.lang.ClassNotFoundException: spatboard.game.TicTacToe

JRE期望的是spatbord.game.TicTacToe,所以这意味着您的包spatboard spatbord拼写错误。

票数 5
EN

Stack Overflow用户

发布于 2015-04-17 00:04:55

请在第三行代码中使用URLClassLoader而不是ClassLoader。

代码语言:javascript
复制
URLClassLoader loader = new URLClassLoader(new URL[]{url});

让我知道这是否起作用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29680032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档